看板 C_and_CPP 關於我們 聯絡資訊
Q1. new了之後delete兩次會造成undefined behavior,為什麼呢? 因為動態配置的memory,會用一個list存放起來, 而第2次delete會刪除到list上其他的node,是這樣嗎??? Q2. 若new了之後不delete,會造成memory leak, 最後memory用盡時,會crash在別的地方,為什麼呢?? Q3. new/delete的實作是每個compiler有各自的實作嗎?? Q4. 有沒有神人能說明new/delete是怎麼實作的呢??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.135.190
purpose:new 用 malloc, malloc 呼叫 HeapAlloc (Win API,閉源) 08/16 23:55
kdjf:因為標準中沒有說new/delete的怎麼實做,只規定要可以del一次 08/17 01:39
linotwo:Q1. 因為第一次 delete 以後空間已經被釋放不能用了, 08/17 02:18
linotwo: 而且如果這時別人又 new 到同個位址, 08/17 02:18
linotwo: 難道活該要被你 delete 嗎? 08/17 02:18
所以,在delete之後,只有在別人又new到相同位址的情況下 delete twice才會出錯囉? 如果該位址一直沒有被別人new到,就算多delete 幾次都沒有問題,是這樣嗎?
linotwo:Q2. 因為 memory leak 是個 bug,當掉也是挺合理的。 08/17 02:19
linotwo:Q3. 是,也可以自己實作。 08/17 02:19
linotwo:Q4. 你可以 google "dlmalloc" 08/17 02:19
BombCat:Q2.不見的一定會Crash吧? 08/17 02:40
linotwo:某些情況下的 memory leak 確實是一定不會 crash 08/17 03:02
linotwo:但是如果會隨操作或時間不斷變多的話必定會產生問題。 08/17 03:03
damody: 有沒有神人能說明 windows 是怎麼實作的呢??? 08/17 11:42
damody: 不要認真回我謝謝 08/17 11:42
purpose:#1FWIgryW (Programming) 獻醜 08/17 12:55
rosemary0401:p大的文經典 消化中 08/18 00:01
※ 編輯: rosemary0401 來自: 111.240.152.202 (08/18 00:06)