簡體   English   中英

如何在C ++中刪除字符指針

[英]How to delete a char pointer in c++

因此,如果我聲明以下代碼

int main() {
   char* c = new char[20];
   delete c;
   return 0;
}

為什么沒有內存泄漏? 不是正確的刪除方式

delete[] c;

兩種方法都能正常工作,而且兩種方法都不會造成內存泄漏。

第一種方法不起作用 看起來好像可行。

這被稱為未定義行為 :如果您做錯了事,C ++不會牽手。 它允許編譯器假定您沒有犯某些類型的錯誤,因為檢查這些錯誤會降低程序的速度。

如果您編寫未定義的行為,則您的程序可以執行任何操作 包含:

實際上,“看起來完美地工作”是最糟糕的,因為您沒有意識到自己有錯誤。 例如,直到您移植到其他平台,或獲得新的編譯器版本,或發生其他變化, 然后開始獲得奇怪的結果之前,但是當然,這段代碼已經使用了多年,因此不可能您的代碼有誤...可以嗎?

即使不是必需的,優秀的編譯器仍然會抱怨其中某些類型的錯誤,尤其是當您打開額外的警告時。 此外, 靜態分析工具可以幫助您捕獲更多此類錯誤。 (僅搜索該術語;在此處提出建議將明顯不在主題之列)。

兩種方式都行不通。 如果使用new []分配數組,則必須使用delete []刪除它。 期。 否則,它是未定義的行為。

注意:如果第一種方式可以編譯並運行,則並不意味着它可以工作。 這是未定義的行為。 什么都可能發生。 您的程序可能會崩潰。 可能不會。 沒有什么可以肯定地說的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM