私はSEHでいくつかの実験をしていました。私のコードでは、エラーの原因となるブロックを __try 句に記述し、ハンドラーを __except() に記述しました。
__try{
Test *pTest = 0;
int k = pTest->GetValue();
cout << "continue after exception" << endl;
}
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION,EXCEPTION_EXECUTE_HANDLER)
{
cout << "caught!!" << endl;
}
cout << "Exception handled" << endl;
__except() の 2 番目のパラメーターは、次のいずれかです。
EXCEPTION_CONTINUE_SEARCH 例外は認識されません。最初に try-except ステートメントを含むハンドラー、次に優先順位の高いハンドラーのスタックを検索し続けます。
EXCEPTION_CONTINUE_EXECUTION 例外は認識されますが、無視されます。例外が発生した時点で実行を続行します。
EXCEPTION_EXECUTE_HANDLER 例外を認識しました。__except 複合ステートメントを実行して例外ハンドラーに制御を移し、例外が発生した時点で実行を継続します。
EXCEPTION_CONTINUE_EXECUTION/EXCEPTION_EXECUTE_HANDLER を使用すると、例外発生時点で実行が継続されません (例外発生時点の意味を誤解している可能性があります)。デバッグモードで実行すると、出力は
caught
Exception handled
リリースモードで実行すると、出力は
continue after exception
Exception handled
なぜ動作が異なるのか理解できませんでした。誰でも助けてください。