首頁 >後端開發 >C++ >我什麼時候應該在 C 中使用 `delete ptr` 與 `delete[] ptr` ?

我什麼時候應該在 C 中使用 `delete ptr` 與 `delete[] ptr` ?

DDD
DDD原創
2024-12-29 03:28:14281瀏覽

When Should I Use `delete ptr` vs. `delete[] ptr` in C  ?

語法delete ptr 是否等同於delete[] ptr?

delete 和delete[] 之間的差異可能看起來很微妙,但它們對於 C 中的記憶體管理至關重要。

考慮以下程式碼程式碼片段:

IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];

此程式碼使用 new 分配一個包含 100 個 IP_ADAPTER_INFO 結構的陣列。要釋放此內存,我們需要使用適當的刪除語法。

使用delete ptr:

delete ptr;

此語法不正確。 ptr 指向一個物件數組,因此必須使用delete[] 來刪除它。如果不這樣做會導致未定義的行為,從而導致記憶體洩漏或其他不可預測的後果。

使用delete[] ptr:

delete[] ptr;

此語法是正確的。 delete[] 用於釋放數組。它將為數組中的每個元素調用適當的析構函數,並釋放為整個數組分配的記憶體。

反組譯程式碼分析:

提供的反組譯程式碼示範了delete ptr 和delete[] ptr 之間的差異。

對於delete ptr,對operator delete 進行了一次調用,表明它正在嘗試刪除單一物件。

對於delete[] ptr,呼叫了運算符delete[],表示它正在嘗試刪除一個物件陣列。

結論:

為了避免記憶體洩漏和未定義的行為,對陣列使用正確的刪除語法至關重要。 delete ptr 應用於刪除單一對象,而delete[] ptr 應用於刪除陣列。

以上是我什麼時候應該在 C 中使用 `delete ptr` 與 `delete[] ptr` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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