何が起こったのかを確認するためにこのテストを行いました。
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