2014-11-01 73 views
-2

我正在研究如何使用動態分配來使用指針創建一個對象。而且我讀到,當一個對象被創建一次並且被刪除兩次時,堆內存就會被損壞。腐敗意味着什麼?它是類似於內存泄漏還是其他東西?刪除指針對象會損壞堆內存

int main() 
{ 
    //consider my class name is sample 
    sample *p= new sample; 
    //some code 
    delete p; 
    //some code 
    delete p; 
} 

當我刪除首次在p,p指向內存被清除,並安全地返回到堆。下一次會發生什麼?

回答

1

免費商店是一個精心管理的免費和分配區塊系統,新增和刪除功能可以使所有物品保持一致的狀態。如果再次刪除,系統可能會對無效數據執行相同的簿記操作,並且突然間免費商店處於不一致狀態。這被稱爲「堆腐敗」。

一旦出現這種情況,任何你做新的或刪除可能有不可預知的結果,這可以包括嘗試將應用程序的內存區域之外寫入,數據損壞,誤以爲沒有更多的內存,或重疊的分配。

最安全的賭注是刪除它後始終將指針設置爲空。

int *ptr = new int; 
// do something 
delete ptr; 
ptr = null; 
+0

會提示'nullptr'而不是'null'。這是絕對安全的,因爲nullptr的刪除由標準明確支持,因爲沒有任何效果。 – Christophe 2014-11-01 12:00:46