看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
zptdaniel:謝謝!!我懂了! 03/19 00:38