[問題] delete 和 delete []

看板C_and_CPP作者 (神奇)時間15年前 (2010/07/16 00:43), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 開發平台: (Dev-C++) 補充說明: #include <iostream> using namespace std; int main() { int *x = new int [10000000]; system("pause"); delete [] x; system("pause"); return 0; } 請問delete [] x如果改成delete x 那實際上運作是會怎樣 我去看兩者的記憶體使用情行好像一樣 delete x好像也有釋放掉10000000size的記憶體空間 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.231.212

07/16 00:51, , 1F
delete [] 會去找你實際上有幾個物件, 呼叫 n 次解構
07/16 00:51, 1F

07/16 00:51, , 2F
07/16 00:51, 2F

07/16 00:52, , 3F
未定義行為? 如果是class type只會呼叫一個destructor
07/16 00:52, 3F

07/16 03:41, , 4F
你把 int 改成自己定義的物件,然後在 destructor 放個
07/16 03:41, 4F

07/16 03:41, , 5F
cout 不就知道了?就算你的 memory allocate/release 函式
07/16 03:41, 5F

07/16 03:42, , 6F
在底層會聰明的用 address 去記錄配置的空間大小,使得你
07/16 03:42, 6F

07/16 03:42, , 7F
用了 delete 還是會正常釋放空間,但解構行為只會發生在
07/16 03:42, 7F

07/16 03:42, , 8F
第一個元素上。
07/16 03:42, 8F

07/16 03:43, , 9F
第一句推文應該改成「自己定義的型別」
07/16 03:43, 9F

07/16 03:44, , 10F
所以,不管空間有沒有正常釋放,你的程式這樣寫很容易發生
07/16 03:44, 10F

07/16 03:44, , 11F
你預期外的行為。
07/16 03:44, 11F

07/16 13:56, , 12F
只要自定義型別裡還有未release的指標 就炸啦
07/16 13:56, 12F
文章代碼(AID): #1CFphALZ (C_and_CPP)