作者jacky1989 (幻想的夢境)
看板C_and_CPP
標題[問題] 記憶體管理策略問題 part 2
時間Sun Mar 9 03:58:15 2014
開發平台(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