[問題] 記憶體管理策略問題 part 2

看板C_and_CPP作者 (幻想的夢境)時間10年前 (2014/03/09 03:58), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2010 問題(Question): 如果在副函式宣告指標傳回主函式 那是否要free? 如果要free 是要放在哪裡? 程式碼(Code):(請善用置底文網頁, 記得排版) #include<stdlib.h> #include<stdio.h> #include<malloc.h> char *fun(int input); int main(){ printf("a%sb\n",fun(5)); return 0; } char *fun(int input){ char *space; int i; space = (char *)malloc(sizeof(*space)*input+1); //+1是為了多一位的結束字元 for(i=0;i<input;i++) *(space+i) = ' '; *(space+i)='\0';//+1的意義在這 return space; /*如果return 後就會跳回原來呼叫的函式,那是否該free? 如果不free,那資源是不是就一直被佔住? 有沒有更好的寫法?? */ } 補充說明(Supplement): 上一篇有發過一次指標的問題,先感謝熱心的網友回答 不過有回答到,誰malloc就誰free,這邊我有咦問 如果是在sub function malloc然後傳回原來的函式 那該怎麼處理? 感覺跟上一篇一樣 但是又不太一樣 所以再發一篇 如果有違反規則 再請版主告知 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.233.66.46 ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 03:59)

03/09 04:06, , 1F
記憶體管理的策略 <- 這篇不是在問指標
03/09 04:06, 1F
這已經是記憶體管理策略了嗎? 所以我是否該改標題? ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:08)

03/09 04:11, , 2F
對。這樣才符合內文
03/09 04:11, 2F
好的 謝謝版主 ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:12)

03/09 04:12, , 3F
發現前一篇也不是在問指標…
03/09 04:12, 3F
已更正 ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:14)

03/09 08:30, , 4F
這種狀況常見的做法是 malloc 那邊提供另一個函式 free
03/09 08:30, 4F

03/09 08:31, , 5F
然後呼叫方只要確定用前者要來的指標 (或者廣義地說是資源)
03/09 08:31, 5F

03/09 08:31, , 6F
之後有送給後者去銷毁就可以了
03/09 08:31, 6F

03/09 08:32, , 7F
最好的例子就是 fopen 跟 fclose
03/09 08:32, 7F

03/09 08:32, , 8F
fopen 會回傳一個 malloc 來的 FILE * 指標
03/09 08:32, 8F

03/09 08:33, , 9F
而我們用的人只要確定它之後有被送去 fclose 銷毁就行了
03/09 08:33, 9F

03/09 08:33, , 10F
free 的動作會在 fclose 裡做掉
03/09 08:33, 10F

03/10 18:45, , 11F
c++11 smart pointer?
03/10 18:45, 11F

03/10 22:44, , 12F
智能指標+1
03/10 22:44, 12F
文章代碼(AID): #1J6tPQMF (C_and_CPP)