[問題] 動態配置記憶體會出問題的原因

看板C_and_CPP (C/C++)作者 (rosemary)時間13年前 (2012/08/16 23:45), 編輯推噓3(3012)
留言15則, 6人參與, 最新討論串1/2 (看更多)
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

08/16 23:55, , 1F
new 用 malloc, malloc 呼叫 HeapAlloc (Win API,閉源)
08/16 23:55, 1F

08/17 01:39, , 2F
因為標準中沒有說new/delete的怎麼實做,只規定要可以del一次
08/17 01:39, 2F

08/17 02:18, , 3F
Q1. 因為第一次 delete 以後空間已經被釋放不能用了,
08/17 02:18, 3F

08/17 02:18, , 4F
而且如果這時別人又 new 到同個位址,
08/17 02:18, 4F

08/17 02:18, , 5F
難道活該要被你 delete 嗎?
08/17 02:18, 5F
所以,在delete之後,只有在別人又new到相同位址的情況下 delete twice才會出錯囉? 如果該位址一直沒有被別人new到,就算多delete 幾次都沒有問題,是這樣嗎?

08/17 02:19, , 6F
Q2. 因為 memory leak 是個 bug,當掉也是挺合理的。
08/17 02:19, 6F

08/17 02:19, , 7F
Q3. 是,也可以自己實作。
08/17 02:19, 7F

08/17 02:19, , 8F
Q4. 你可以 google "dlmalloc"
08/17 02:19, 8F

08/17 02:40, , 9F
Q2.不見的一定會Crash吧?
08/17 02:40, 9F

08/17 03:02, , 10F
某些情況下的 memory leak 確實是一定不會 crash
08/17 03:02, 10F

08/17 03:03, , 11F
但是如果會隨操作或時間不斷變多的話必定會產生問題。
08/17 03:03, 11F

08/17 11:42, , 12F
有沒有神人能說明 windows 是怎麼實作的呢???
08/17 11:42, 12F

08/17 11:42, , 13F
不要認真回我謝謝
08/17 11:42, 13F

08/17 12:55, , 14F
08/17 12:55, 14F

08/18 00:01, , 15F
p大的文經典 消化中
08/18 00:01, 15F
※ 編輯: rosemary0401 來自: 111.240.152.202 (08/18 00:06)
文章代碼(AID): #1GBHML8d (C_and_CPP)
文章代碼(AID): #1GBHML8d (C_and_CPP)