作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題Re: [問題] delete / new , free / malloc
時間Wed Jan 11 18:17:52 2012
基於上面那篇@@
我趕快寫了一段測試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