2016-12-05 28 views
-1

通常當一個foo()有內存問題時,整個程序將只是核心轉儲,崩潰。但是當C核心轉儲發生在foo()內部時,C是否有任何保護方式來保證程序不會崩潰,轉到某個狀態或僅僅返回?C是否得到try&catch來保證沒有核心轉儲會崩潰?

+2

如果存在內存問題,您希望**它會崩潰。否則,你的程序可能會出現你無法解釋的奇怪行爲。 – dbush

+0

要放大@dbush評論,不幸的是,不能保證「內存問題」實際上會導致C程序崩潰 - 它只會給出錯誤的結果。你所能說的是,碰撞*可能最終會發生。結果也可能是非確定性的,取決於原因,特別是在多線程程序中。 – cdarke

+0

順便說一下,標準C中沒有'try'和'catch'。Windows C支持'__try'和'__except',但這是非標準的。 – cdarke

回答

0

不能說在try和catch語句中的c,但是你可以寫信號處理程序來捕獲段錯誤。 這是一個鏈接。 How to catch segmentation fault in Linux?

+0

http://stackoverflow.com/questions/2350489/how-to-catch-segmentation-fault-in-linux/2436368#2436368 – KevinDTimm

+0

主要捕獲'SIGSEGV'從不幫助。如果堆棧被搗毀,或者內存管理信息被刪除,混亂或WTF丟失,則沒有機會從中恢復。 – alk