ポインター演算からセグメンテーション違反を起こすプログラムがあります。これが発生することはわかっていますが、セグメンテーション違反かどうかを事前に簡単に確認することはできません。入力データを「事前スキャン」して、セグメンテーション違反が発生するかどうかを確認することもできます (これを判断することはできません)。または、非常に大量の作業が必要になるポインター演算を使用しないように修正するか、セグメンテーション違反をキャッチしようとすることができます。だから私の質問:
1) C でセグメンテーション違反をキャッチするにはどうすればよいですか? OSの何かがセグメンテーション違反を引き起こすことは知っていますが、セグメンテーション違反が発生した場合、Cプログラムは何ができるのSegmentation fault
でしょうか?
2) これはどの程度移植性がありますか?
これは非常に移植性の低い動作だと思うので、セグメンテーション違反をキャッチするコードを投稿する場合は、それがどのように機能するか教えてください。私は Mac OS X を使用していますが、自分のプログラムができるだけ多くのプラットフォームで動作するようにしたいと考えており、オプションが何であるかを確認したいと考えています。
そして心配しないでください - 基本的に私がやりたいことは、よりユーザーフレンドリーなエラーメッセージを出力し、malloc()
ed メモリをいくらか解放してから死ぬことだけです。発生したすべてのセグメンテーション違反を無視して先に進むつもりはありません。