看板 C_and_CPP 關於我們 聯絡資訊
基於上面那篇@@ 我趕快寫了一段測試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
PkmX:為什麼不就直接Foo* f = new Foo? 01/11 18:27
littleshan:不要瞎猜,去搜尋memory allocator是怎麼做的 01/11 18:30
diabloevagto:你真的確定你new的語法正確嗎? 01/11 19:18