2

try-catchこれは主に好奇心ですが、C++構造でSEH例外をキャッチするVisualStudioの歴史について読んでいます。/GXフラグが有効になっている古いバージョンのVisualStudioは、C++catchブロックで構造化されたWin32例外を「時々」キャッチするという主張に出くわし続けています。

/ GXフラグを使用してビルドした場合、Visual Studio 6.0はどのような状況で次のコードのcatchブロックに入りますか?

char * p = NULL;

try
{
    *p = 'A';
}
catch(...)
{
    printf("In catch\n");
}

Visual Studio 6 + SP6を使用した私自身の簡単なテストでは、プログラムの実行は手に負えない例外で停止し、「Incatch」が出力されることはありません。しかし、いくつかの記事(このcatchようなもの)は、ブロックに入ることが可能であると私に信じさせます。

4

1 に答える 1

0
int main()
{
    __try
    {
        int *pInt = NULL;
        *pInt = 0;// throw some kind of exception
    }
    __except( EXCEPTION_EXECUTE_HANDLER )
    {
        DWORD dw = GetExceptionCode();
        switch(dw)
        {
        case EXCEPTION_ACCESS_VIOLATION:
            cout << "access violation\n";
            break;
        case EXCEPTION_INT_DIVIDE_BY_ZERO:
            cout << "int divide by zero\n";
            break;
        case EXCEPTION_FLT_DIVIDE_BY_ZERO:
            cout << "floating point divide by zero\n";
            break;
        // other cases
        }
    }
    return 0;
}

それはおそらく私がネットを見ている唯一の方法です。

また、私が推測できるように、そのような例外を処理するのが良くない理由を知っていても、ここに来るグーグル社員は読んでください:

http://members.cox.net/doug_web/eh.htm#Q1

于 2010-07-27T18:42:35.567 に答える