Re: [問題] delete / new , free / malloc

看板C_and_CPP作者 (我愛阿蓉)時間14年前 (2012/01/11 18:17), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串2/7 (看更多)
基於上面那篇@@ 我趕快寫了一段測試code while(true) { Foo* XD = (Foo*)new char[1000]; 1. XD ++; delete XD; //馬上出現assertion //////////////////////////// 2. char * ptr = (char*)XD; delete ptr; //////////////////////////// } 1. 馬上跳出assertion 讓我非常不解 我預期是他要馬就leak sizeof (Foo) bytes 然後不應該當掉 想不到他會出現奇怪的assertion 讓我對他memory management的機制感到不解..... 另外 我把XD++ 趕給遮起來 跑程式用工作管理員看mem的狀況 是完全沒leak的 但是我並沒有用delete []XD; 他到底是怎麼maintain 導致不leak 查一下文章 都是說 delete XD 就是只對單一 元素 我就理解成 他只會delete sizeof (Foo)個bytes 誰知道他整串都delete掉了 這是誰做的手腳?? VC? OS? 2. 基於上面不leak的情況 我用2. 只用一個char*指過去 只針對一個char * 作delete 誰知道也不leak 這是微軟VC compiler自己做了一些手腳讓我剛好沒leak嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222

01/11 18:27, , 1F
為什麼不就直接Foo* f = new Foo?
01/11 18:27, 1F

01/11 18:30, , 2F
不要瞎猜,去搜尋memory allocator是怎麼做的
01/11 18:30, 2F

01/11 19:18, , 3F
你真的確定你new的語法正確嗎?
01/11 19:18, 3F
文章代碼(AID): #1F3M7JHU (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F3M7JHU (C_and_CPP)