それはセグメンテーションフォールト未定義のプラットフォーム上でプログラムにメソッドを定義するのは難しいです。 セグメンテーションフォールトは、すべてのプラットフォーム(単純な小型コンピュータなど)では定義されていない緩やかな用語です。
プロセスをサポートするオペレーティングシステムのみを考慮すると、プロセスはセグメンテーション違反が発生したという通知を受け取ることができます。
最もクロスプラットフォームの問題の場合のようにまた、OSの「のようなUNIX」にオペレーティングシステムを制限する、SIGSEGV信号を受信するプロセスのための信頼できる方法がkill(getpid(),SIGSEGV)
あり、各プラットフォームできる(通常い)は、seg-faultingの定義が異なります。
しかし、実用的で、かつEDIT2、現在のMACに答えて、LINとのOSを勝つためには、さらに
*(int*)0 = 0;
にセグメンテーションフォールトなり、それがセグメンテーションフォルトを引き起こす悪い行動ではありません。 assert()
の実装によっては、コアファイルを生成するSIGSEGV信号が発生します。剖検が必要なときに非常に便利です。
try
{
anyfunc();
}
catch (...)
{
printf("?\n");
}
エラーの原因を隠し、あなたが上に行くために持っているすべてがある::
?
セグメンテーションフォルトがそれを隠している原因より悪い何
。
あなたの特定のプラットフォームに関して、あるいはプラットフォームに依存しない方法で信頼できますか? –
'*((char *)0)= '\ 0';' –
@Mad物理学者がプラットフォームに依存しないようにしてください – Erich