[問題] 一個讓我很驚訝的錯誤訊息請教
大家好
今天遇到記憶體問題 debug到剛剛
雖然是個蠢問題
但是讓我很驚訝
請大家告訴我為什麼會這樣~~~
今天一開始遇到的問題是
class A裡面有class B的指標*ptr
而我用A *a=new A[10];
我只有給a[0].ptr=有效的值
而我去delete []a;
他怎麼樣都會蕩.........
原來是 [1~9]的ptr 不知道指到哪不能去動他
解決辦法就是要給ptr=NULL; delete才不會出問題
現在想想真蠢= =
發現這問題後
讓我更不解的來了
我想說既然我只有[0]是有效的 , 其他[1~9].ptr 我沒給初始值
那我就寫
delete a; 或是寫 delete &a[0];
想說回收一個就好,它還是給我一直盪....
我開一個小測試程式跑跑看
錯誤訊息跟
char *pp="@";
delete pp;
一樣..................
我的結論就是 你只要是自己寫的class, new出來的空間要回收
一定要一次全部delete ....用delete []a;
不然就會蕩.............
但這讓我很不解.......也很訝異
以前還會看到版上新手問說 delete ptr和delete[]ptr差在哪...
沒想到差這麼多
我不懂為什麼會降子,請強者給予觀念指證好嘛@@
這跟我測試的例子delete一個const char*會蕩掉 有關聯嗎?
class A
{
public:
A(){}
int x;
~A(){cout<<x<<endl;
}
};
int main()
{
A *p=new A[10];
for(int i=0;i<10;i++)
p[i].x=i;
delete p;
}
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.207.211
推
04/07 01:27, , 1F
04/07 01:27, 1F
→
04/07 01:28, , 2F
04/07 01:28, 2F
→
04/07 01:28, , 3F
04/07 01:28, 3F
→
04/07 01:30, , 4F
04/07 01:30, 4F
→
04/07 01:31, , 5F
04/07 01:31, 5F
→
04/07 01:38, , 6F
04/07 01:38, 6F
※ 編輯: QQ29 來自: 140.113.207.211 (04/07 01:42)
→
04/07 01:42, , 7F
04/07 01:42, 7F
推
04/07 01:43, , 8F
04/07 01:43, 8F
→
04/07 01:43, , 9F
04/07 01:43, 9F
→
04/07 01:44, , 10F
04/07 01:44, 10F
推
04/07 01:49, , 11F
04/07 01:49, 11F
→
04/07 01:50, , 12F
04/07 01:50, 12F
推
04/07 02:02, , 13F
04/07 02:02, 13F
→
04/07 02:04, , 14F
04/07 02:04, 14F
推
04/07 20:26, , 15F
04/07 20:26, 15F