看板 C_and_CPP 關於我們 聯絡資訊
L大您好 因為看MSDN他這樣寫用malloc 他其實這API正確的用法應該是 先GetAdaptersInfo(NULL, &ulOutBufLen) 他會吐回該分配多少mem 所以我才說他實際上的ulOutBufLen 有可能會大於 sizeof這struct 因為他用malloc 我在想說如果用new / delete會不會比較合適 但就越想越怕說 我會造成mem leak.. 因為我實在不曉得她怎麼去維護他到底new了多少 而且也不曉得為啥我做了指標的++後 delete就會造成assertion 以這個case 是不是就用malloc / free 就好了 至於delete [] 或是delete 都會確實整塊free 我想應該是VC編譯的時候做的手腳? 還滿神奇的 謝謝 ※ 引述《littleshan (我要加入劍道社!)》之銘言: : ※ 引述《QQ29 (我愛阿蓉)》之銘言: : : 但聽說 能用new / delete 就盡量用 : 不要相信「聽說」 : 你要先理解為什麼要選擇 new/delete : : 所以 : : 我想使用new 這operator來做 : : 但有個疑問 : : ulOutBufLen 這個值 有可能 "大於" sizeof(IP_ADAPTER_INFO). : : 假如我用 : : pAdapterInfo = (IP_ADAPTER_INFO *) new char[ulOutBufLen]; : : 這樣安全嗎 : No, 這不是好的 C++ : 王道寫法應該是這樣: pAdapterInfo = new IP_ADAPTER_INFO; : : 如果沒問題的話 : : 我使用 : : delete pAdapterInfo; 就能把這一串連續空間標記起來嗎? : 他會歸還所有的空間 : 但是 : 但是在歸還所有空間之前會先炸掉 : 因為你前面用 new char[] 所以沒呼叫 IP_ADAPTER_INFO 的 ctor : 這邊卻 delete 一個指向 IP_ADAPTER_INFO 的 pointer 所以會呼叫 dtor : 這個例子中因為 IP_ADAPTER_INFO 是一個 POD struct : 沒有 ctor/dtor 所以不會引發問題 : : 相較於delete / new : : malloc / free 是不是就沒這問題了? : : free(pAdapterInfo) 他就是會從 這個起始位址 free到 他剛剛配置的空間的結尾. 因為 : : 我看他範例就直接free了... : : ps.請問有沒有什麼方式 可以驗證 我確實delete 標記掉了多少byte嗎? : : 因為我也不知道我自己這樣寫有沒有問題~~ 謝謝 : : 謝謝 : standard library 會自行記錄每塊分配出去的記憶體占多少空間 : 所以歸還的時候不需要指定大小 : 這點 free 和 delete 是相同的 : 不過我覺得你比較大的問題是不知道前因後果就開始寫code了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.137.84
purincess:windows api本來就純C, 老實講我覺得直接跟他互動的code 01/11 23:20
purincess:用malloc沒什麼不可以的 XD 01/11 23:21