看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
loveme00835:記憶體管理的策略 <- 這篇不是在問指標 03/09 04:06
這已經是記憶體管理策略了嗎? 所以我是否該改標題? ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:08)
loveme00835:對。這樣才符合內文 03/09 04:11
好的 謝謝版主 ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:12)
loveme00835:發現前一篇也不是在問指標… 03/09 04:12
已更正 ※ 編輯: jacky1989 來自: 118.233.66.46 (03/09 04:14)
LPH66:這種狀況常見的做法是 malloc 那邊提供另一個函式 free 03/09 08:30
LPH66:然後呼叫方只要確定用前者要來的指標 (或者廣義地說是資源) 03/09 08:31
LPH66:之後有送給後者去銷毁就可以了 03/09 08:31
LPH66:最好的例子就是 fopen 跟 fclose 03/09 08:32
LPH66:fopen 會回傳一個 malloc 來的 FILE * 指標 03/09 08:32
LPH66:而我們用的人只要確定它之後有被送去 fclose 銷毁就行了 03/09 08:33
LPH66:free 的動作會在 fclose 裡做掉 03/09 08:33
walelile:c++11 smart pointer? 03/10 18:45
a27417332:智能指標+1 03/10 22:44