作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] delete / new , free / malloc
時間Wed Jan 11 17:31:34 2012
new / delete vs malloc / free
請教各位一個小問題
我看msdn的一個sample code
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365917(v=vs.85).aspx
這底下有一個sample
有這行
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
他使用了malloc
但聽說 能用new / delete 就盡量用
所以
我想使用new 這operator來做
但有個疑問
ulOutBufLen 這個值 有可能 "大於" sizeof(IP_ADAPTER_INFO).
假如我用
pAdapterInfo = (IP_ADAPTER_INFO *) new char[ulOutBufLen];
這樣安全嗎
如果沒問題的話
我使用
delete pAdapterInfo; 就能把這一串連續空間標記起來嗎?
我是不曉得他delete怎麼去判定
他連續空間哪一段是他配置的
我很怕
delete pAdapterInfo; 只是把sizeof(IP_ADAPTER_INFO)byte的記憶體給標記
而實際上
我是需要delete 掉sizeof(IP_ADAPTER_INFO) bytes的資訊.
相較於delete / new
malloc / free 是不是就沒這問題了?
free(pAdapterInfo) 他就是會從 這個起始位址 free到 他剛剛配置的空間的結尾. 因為
我看他範例就直接free了...
ps.請問有沒有什麼方式 可以驗證 我確實delete 標記掉了多少byte嗎?
因為我也不知道我自己這樣寫有沒有問題~~ 謝謝
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
※ 編輯: QQ29 來自: 122.147.15.66 (01/11 17:33)
推 tropical72:我納悶的是,為什麼不直接用tool查有沒有mem leak ? 01/11 18:45
→ tropical72:或直接下斷點追new源碼怎麼寫的?vc這部份做得很好. 01/11 18:45
推 amozartea:為什麼不直接new IP_ADAPTER_INFO[...]; 01/11 22:18