/ / try / catchでセグメンテーション違反をキャッチすることは可能ですか? - c ++、try-catch

try / catchでsegfaultを捕まえることは可能ですか? - C + +、try-catch

何が起こったのかを確認するためにこのテストを行いました。

try
{
int *x = 0;
*x = 1234;
}
catch(...)
{
cout << "OK";
}

しかし、それはセグメンテーションフォルトを投げます、なぜそれがセグメンテーションフォルトを捕まえないのですか?

回答:

回答№1は2

いいえ、できません。

A SEGFAULT 通常の例外ではありません。

あなたが示すコードは単に未定義の振る舞いです、そして、何かは起こるかもしれません。それが例外を投げてしまうという保証はありません。


回答№2の場合は0

この答えはWINDOWSに非常に特有です。

構造化例外処理を使用できます。

あなたは "SetUnhandledExceptionFilter"を呼び出す必要があります https://msdn.microsoft.com/en-us/library/ms680634(v=vs.85).aspx

使用プロトタイプ:

あなたは、アプリケーションの冒頭で機能を登録しなければなりません

SetUnhandledExceptionFilter(UnhandledExceptionFilterFunction);

あなたの登録された機能を定義しなさい、あなたのビジネスを処理しなさい。 通常、人々はコアダンプを収集し、開発チームにEメールを送信します。

LONG WINAPI UnhandledExceptionFilterFunction(PEXCEPTION_POINTERS exception)
{


// The exception information is available in  PEXCEPTION_POINTERS

}

PEXCEPTION_POINTERSについては、以下のリンクを参照してください。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms679331(v=vs.85).aspx

これは、 "PEXCEPTION_POINTERS"に表示される例外レコードのリストです。最初のものは "EXCEPTION_ACCESS_VIOLATION"です(LINUX用語ではSEGFAULT)。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082(v=vs.85).aspx