Re: [問題] C++ 用new動態配置記憶體之後無法用del …
※ 引述《zptdaniel ()》之銘言:
: http://rafb.net/p/fzOZWw61.html
: 這是C++ primer plus當中的一題練習題
: 我在set()當中使用new動態配置記憶體之後
: 應該要在main的最後把先前配置的記憶體delete掉
: 但我只要加上 delete [] pt; 就沒辦法正常結束執行
: 請問版上的高手們是我的語法用錯了嗎?
: 謝謝!
char* set(stringy &s1,char *s2)
{
int n;
for(n=0;s2[n]!='\0';n++);
char *ps = new char[n+1];
ps = s2;
s1.str = ps;
s1.str[n+1]='\0';
s1.ct = strlen(s2);
cout<<"Length of strigny.ct is:"<<s1.ct<<endl;
return ps;
}
上色的兩行,ps 剛得到 new 所配置的記憶體的位址,
你又馬上把該指標指向函式的引數 s2,這造成 memory leak。
然後最後 set 所回傳的其實是 main() 中的 char testing[] = "...."; 的位址。
main() 中的 pt 是指向 testing。
於是最後的 delete [] pt 是對"非經由動態配置而來的記憶體"做釋放,那就當了。
--
Need Help With Women? Can UNIX Help?
$> man woman
$> Segmentation fault (core dumped)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 116.59.50.193
→
03/19 00:38, , 1F
03/19 00:38, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):