關於C語言中的Debug Assertion Failed,在編譯和運行時都不會出現錯誤,但是在執行時會出現錯誤。發生這種錯誤的原因可能是:
1、直接釋放了壹個空指針;
2、壹個指針被釋放了兩次(即第二次釋放壹個空指針);
3、數組越界:訪問了超過數組長度的內存。
以下面壹段簡單的源程序代碼為例:
在執行程序時彈出的“Debug Assertion Failed”錯誤警告對話框,這種情況大多是指針引起的錯誤。
下圖紅框標記的地方,是Distance類析構函數,這裏使用了delete。這裏其實是不需要的,因為pDist指針是靜態分配的內存,當程序運行完後,其內存自動釋放,此時使用delete就是刪除壹個不存在的指針,從而報錯,而實際上delete是與new搭配使用的。
擴展資料:
除了指針會引起“Debug Assertion Failed”這種錯誤,數組越界也會引起這種錯誤,也就是內存泄漏。
內存泄漏(即Memory Leak)是指程序中己動態分配的堆內存由於某種原因程序未釋放或無法釋放,造成系統內存的浪費,從而導致程序運行速度減慢甚至系統崩潰。
無論是C還是C++程序,運行時候的變量主要有三種分配方式:堆分配、棧分配、全局和靜態內存分配。而內存泄漏主要是發生在堆內存分配方式中,即“配置了內存後,所有指向該內存的指針都遺失了”。
若缺乏語言這樣的垃圾回收機制,這樣的內存片就無法歸還系統。因為內存泄漏屬於程序運行中的問題,無法通過編譯識別,所以只能在程序運行過程中來判別和診斷。
百度百科-內存泄漏