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

看板C_and_CPP作者時間15年前 (2009/03/19 00:11), 編輯推噓4(4016)
留言20則, 5人參與, 最新討論串1/2 (看更多)
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

03/19 00:15, , 1F
#38 ps = s2;
03/19 00:15, 1F

03/19 00:20, , 2F
可以請樓上告訴我要怎麼改嗎@@? 我不知道該怎麼做|||
03/19 00:20, 2F

03/19 00:21, , 3F
s1.str[n+1]='\0';
03/19 00:21, 3F

03/19 00:21, , 4F
改成 *ps = *s2 嗎?
03/19 00:21, 4F

03/19 00:21, , 5F
陣列a[n] 能用的範圍是a[0~n-1]
03/19 00:21, 5F

03/19 00:22, , 6F
那邊用用strcpy
03/19 00:22, 6F

03/19 00:23, , 7F
就1F所說的 你ps=s2 已經 mem leak了 已經找不回原先ps new的
03/19 00:23, 7F

03/19 00:24, , 8F
而你現在ps指到的是testin[] 是一個靜態陣列 不能delete阿
03/19 00:24, 8F

03/19 00:31, , 9F
s1.str = new char[strlen(s2)];
03/19 00:31, 9F

03/19 00:32, , 10F
strcpy(s1.str, s2);
03/19 00:32, 10F

03/19 00:33, , 11F
或 sprintf(str.s1, "%s", s2);
03/19 00:33, 11F
※ 編輯: zptdaniel 來自: 123.194.100.216 (03/19 00:37)

03/19 00:38, , 12F
原來可以這樣寫啊@@ 懂了 謝謝各位^^
03/19 00:38, 12F

03/19 00:39, , 13F
s1.ct = strlen(s2);
03/19 00:39, 13F

03/19 00:40, , 14F
s1.str = new char[s1.ct * sizeof(char)];
03/19 00:40, 14F

03/19 00:54, , 15F
請問,new char[s1.ct]跟new char[s1.ct * sizeof(char)]
03/19 00:54, 15F

03/19 00:54, , 16F
兩個都可以執行,但是差別在於哪裡呢?
03/19 00:54, 16F

03/19 00:55, , 17F
這好像是個很蠢的問題@@
03/19 00:55, 17F

03/19 00:55, , 18F
是後者配置的記憶體空間較大?
03/19 00:55, 18F

03/19 00:58, , 19F
呃,我搞笑,用到 C 的習慣了 XD new char[s1.ct]; 就好
03/19 00:58, 19F

03/19 01:03, , 20F
喔~了解! 謝謝saxontai!
03/19 01:03, 20F
文章代碼(AID): #19mHr8bg (C_and_CPP)
文章代碼(AID): #19mHr8bg (C_and_CPP)