作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] pointer的double free
時間Tue Jul 14 11:11:45 2009
※ 引述《flax00298 (NI)》之銘言:
: int main()
: {
: int* x=new int;
: *x =10;
: delete[] x;
: delete[] x;
: }
: 我寫個程式長這樣
: 不過也沒有發生什麼不幸的事情
: 我們常看到的double free
: 不是就是這種情形嗎?
: 還是說
: 是free第一次之後有用其他的pointer
: 所以那一塊的heap memory就被其他pointer使用
: 結果在之後又free第二次了
: 所以就free到不該free的地方這樣嗎?
1) deallocate 兩次不一定會死, 但不代表不會死.
就像用 array 超過邊界之類, 也不一定會死.
2) new 請配搭 delete. 要是你寫的是
int* x = new int[10]; 之類才用 delete[]
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推 flax00298:可是delete[]好像也可以當delete用耶...這裡是故意測的 07/14 11:19
→ ledia:可以就是可以, 不可以就是不可以, 到底哪來的 "好像可以" 07/14 11:26
→ adrianshum:寫 array 超過邊界測起來也不一定會死, 是不是又代表 07/14 11:41
→ adrianshum:這樣做是可以呢? 07/14 11:41
推 flax00298:因為我不確定到底ok不ok阿~只是我用到現在還沒出包過 07/14 12:48
推 QQ29:你是用VC還是dev寫的? 07/14 12:58
推 flax00298:DEV 07/14 13:09
→ adrianshum:要是真的可以的話, 當初就不會分delete和delete[] 了啦 07/14 15:36