簡體   English   中英

C ++-調試斷言在程序退出時失敗

[英]C++ - Debug Assertion Failed on program exit

當調用“退出”或讓我的程序自行結束時,它會導致調試斷言:

調試斷言失敗

按“重試”並不能幫助我找到問題的根源。 我知道這很可能是由於某處的內存被釋放兩次而導致的,問題是我不知道在哪里。

整個程序由數十萬行組成,這使得很難確切猜測是什么導致了錯誤。 有沒有一種方法可以准確地指出問題的根源,而不必在代碼中逐行梳理?

調用棧實際上也沒有幫助:

調用堆棧

如果刪除已刪除的對象,通常會出現這種錯誤。

如果將一個對象提供給應該擁有第一個對象所有權的多個其他對象,並且兩者都嘗試在其析構函數中刪除它,則會發生這種情況。

正如消息框已經暗示的那樣,您可能以某種方式破壞了堆。 您釋放/刪除了您不應該使用的某個內存塊,或者您嘗試寫入已經釋放/刪除的某個內存塊。

調用堆棧表明,這可能在單步執行main函數的最后一行時發生。 如果真是這樣,那么問題可能出在某些用戶定義類型的清除例程中,您可以在main函數中創建其實例。 嘗試在自己的類的析構函數中設置斷點並進行調查。

您可能在程序操作期間破壞了堆,但是直到程序結束才檢測到堆,在這種情況下,堆棧跟蹤只會指向內存檢查例程

您可能在操作期間可以調用一個函數來檢查堆是否有效,這可能使失敗更接近破壞點

HeapValidate是此類例程的一個示例,但這取決於您使用的平台

當您使用delete[]而不是delete時,也會發生此錯誤。 但是,如上所述,這只是許多原因之一。

暫無
暫無

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

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