Re: [問題] C++ 用new動態配置記憶體之後無法用del …

看板C_and_CPP作者 (黑暗,點綴孤零零的星)時間15年前 (2009/03/19 00:23), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #19mI0TDn (C_and_CPP)
文章代碼(AID): #19mI0TDn (C_and_CPP)