(**.exe 中)處有未經處理的異常: 堆已損壞
阿新 • • 發佈:2018-12-08
問題描述:Debug模式下除錯程式沒有異常,在Release模式下執行,主程式退出時報異常。。。(**.exe 中)處有未經處理的異常: 。。。 堆已損壞。
出錯原因:先上一段簡單的程式碼。
class MyClass1 { } class MyClass2 { } class ClassManager { public: ClassManager(MyClass1* class1, MyClass2* class2;) : m_Class1(class1), m_Class2(class2){} ~ClassManager() { delete m_Class1; m_Class1 = NULL; delete m_Class2; m_Class1 = NULL; } ... private: MyClass1* m_Class1; MyClass2* m_Class2; } int _tmain(int argc, _TCHAR* argv[]) { MyClass1 c1; MyClass2 c2; ClassManager cm(&c1, &c2); ... return 0; }
出錯原因為主程式中的物件c1和c2並不是用new申請的記憶體,但是在ClassManager的解構函式中使用delete對其進行了釋放。
處理方法:刪除ClassManager的解構函式中的語句。
總結:new和delete要成對使用,且儘量放在一個檔案中,方便管理不容易出錯。