看板 C_and_CPP 關於我們 聯絡資訊
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