[英]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.