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

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

DDD
DDD原創
2025-01-03 08:15:40129瀏覽

`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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn