2016-12-05 4 views
-1

通常、foo()にメモリの問題がある場合、プログラム全体がコアダンプ、クラッシュします。しかし、Cは、プログラムがクラッシュしないようにするための保護手段を持っていますか?コアダンプがクラッシュすることがないように、Cはtry&catchを取得しますか?

+2

メモリに問題がある場合は、**それがクラッシュするようにします。それ以外の場合は、説明できない奇妙な動作をする可能性があります。 – dbush

+0

@dbushのコメントを拡大するために、残念なことに "メモリの問題"が実際にCプログラムをクラッシュさせるという保証はなく、間違った結果しか得られません。あなたが言うことができるのは、クラッシュ*が最終的に発生するかもしれないということだけです。結果は、原因、特にマルチスレッドプログラムでは、非決定論的でもあります。 – cdarke

+0

ちなみに、標準Cでは 'try'と' catch'はありません。Windows Cは '__try'と' __except'をサポートしていますが、それは非標準です。 – cdarke

答えて

0

cでtryとcatchステートメントについては言えませんが、はい、segfaultをキャッチするシグナルハンドラを記述できます。 ここにリンクがあります。 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

関連する問題