首頁 > 後端開發 > C++ > `delete ptr` 與 `delete[] ptr`:為什麼一個是安全的,另一個是記憶體洩漏?

`delete ptr` 與 `delete[] ptr`:為什麼一個是安全的,另一個是記憶體洩漏?

DDD
發布: 2025-01-03 08:15:40
原創
123 人瀏覽過

`delete ptr` vs. `delete[] ptr`: Why is One Safe and the Other a Memory Leak?

用delete刪除陣列相當於delete[]嗎?

在處理動態數組時,理解刪除和刪除的區別是至關重要的使用delete刪除單個元素並使用delete[]刪除整個數組。

為什麼要刪除ptr 可能導致未定義的行為

在提供的程式碼中:

IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
登入後複製

ptr 指向100 個IP_ADAPTER_INFO 結構的數組。用delete ptr刪除指標相當於刪除陣列的第一個元素。但是,這會留下剩餘的 99 個元素。這可能會導致內存洩漏。

反組譯程式碼分析

Visual Studio 2005 為delete ptr 和delete []ptr 產生的反彙編程式碼清楚地顯示了差異:

  • delete ptr:只釋放ptr指向的記憶體(第一個
  • delete []ptr:呼叫運算子delete[],正確地釋放整個陣列。

結論

避免未定義的行為並防止記憶體洩漏,請始終使用delete []ptr 來釋放用new動態分配的陣列。

以上是`delete ptr` 與 `delete[] ptr`:為什麼一個是安全的,另一個是記憶體洩漏?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板