簡體   English   中英

C語言:在“assert()”失敗后,程序如何繼續運行一段時間?

[英]C Language: How is it possible for your program to continue running for a little bit after an “assert()” has failed?

我目前(不要問為什么:P)實現我自己的malloc()和free()版本,並故意在free()的第一行放置一個斷言(0)以用於當前的調試目的。

驅動程序正在測試這些malloc()和free()的隨機序列,以測試我的實現的正確性。

但是,當我運行驅動程序時,shell會打印出“Assertion'0'失敗”,繼續運行一段時間, 然后打印“Aborted”。 實際上,看起來它甚至可以在報告斷言失敗之間多次調用malloc(),然后最終報告程序已中止。 我確信這是因為我在代碼中放置了某些printf語句以打印出某些變量用於調試目的。

我並沒有要求任何關於實現malloc()和free()的幫助。 只想在程序報告失敗后,即使程序似乎繼續運行一小段時間(甚至可能調用其他用戶定義的函數),也只是想知道什么意思。

如果你看到'斷言失敗',然后調試打印,然后退出,有兩個明顯的可能性。

一個是斷言消息和調試打印進入兩個不同的緩沖輸出流(例如stderr和stdout),它們沒有按照它們被填充的相同順序刷新。

另一個是多個執行線程正在命中malloc()。

如果您使用基於glibc的系統,問題可能是fprintf在內部調用malloc ,而assert依次使用fprintf來打印斷言失敗消息。 這當然是一個非常糟糕的設計,因為來自內存不足情況的打印錯誤消息總是會失敗(在許多其他問題中),但它就是這樣......

暫無
暫無

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

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