作者zptdaniel ()
看板C_and_CPP
標題[問題] C++ 用new動態配置記憶體之後無法用delete刪除
時間Thu Mar 19 00:10:41 2009
http://rafb.net/p/fzOZWw61.html
這是C++ primer plus當中的一題練習題
我在set()當中使用new動態配置記憶體之後
應該要在main的最後把先前配置的記憶體delete掉
但我只要加上 delete [] pt; 就沒辦法正常結束執行
請問版上的高手們是我的語法用錯了嗎?
謝謝!
------------------------------
這是題目的限制..剛忘記跟程式碼PO在一起
set(beany, testing);
//first argument is a reference,
//allocates space to hold copy of testing,
//sets str member of beany to point to the new block,
//copies testing to the new block,
//and sets ct member of beany
--
我以為遠方 會有新的風景
卻在每一個異地 流浪回望著記憶
"For the way I live" by Tizzy Bac
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.100.216
1F:→ xam:#38 ps = s2; 03/19 00:15
2F:→ zptdaniel:可以請樓上告訴我要怎麼改嗎@@? 我不知道該怎麼做||| 03/19 00:20
3F:→ akasan:s1.str[n+1]='\0'; 03/19 00:21
4F:→ zptdaniel:改成 *ps = *s2 嗎? 03/19 00:21
5F:→ akasan:陣列a[n] 能用的範圍是a[0~n-1] 03/19 00:21
6F:→ akasan:那邊用用strcpy 03/19 00:22
7F:推 QQ29:就1F所說的 你ps=s2 已經 mem leak了 已經找不回原先ps new的 03/19 00:23
8F:→ QQ29:而你現在ps指到的是testin[] 是一個靜態陣列 不能delete阿 03/19 00:24
9F:推 saxontai:s1.str = new char[strlen(s2)]; 03/19 00:31
10F:→ saxontai:strcpy(s1.str, s2); 03/19 00:32
11F:→ saxontai:或 sprintf(str.s1, "%s", s2); 03/19 00:33
※ 編輯: zptdaniel 來自: 123.194.100.216 (03/19 00:37)
12F:→ zptdaniel:原來可以這樣寫啊@@ 懂了 謝謝各位^^ 03/19 00:38
13F:推 saxontai:s1.ct = strlen(s2); 03/19 00:39
14F:→ saxontai:s1.str = new char[s1.ct * sizeof(char)]; 03/19 00:40
15F:→ zptdaniel:請問,new char[s1.ct]跟new char[s1.ct * sizeof(char)] 03/19 00:54
16F:→ zptdaniel:兩個都可以執行,但是差別在於哪裡呢? 03/19 00:54
17F:→ zptdaniel:這好像是個很蠢的問題@@ 03/19 00:55
18F:→ zptdaniel:是後者配置的記憶體空間較大? 03/19 00:55
19F:推 saxontai:呃,我搞笑,用到 C 的習慣了 XD new char[s1.ct]; 就好 03/19 00:58
20F:→ zptdaniel:喔~了解! 謝謝saxontai! 03/19 01:03