-1

重複の可能性:
C++でのクラッシュを防ぐ方法

typedef struct {
    int val;
} valStruct;

main()
{
    try {
        valStruct *s = NULL;
        int v = s->val;       // bad 
    }
    catch (...) {}
}

MacOSにはかなり新しい。デバッガーで実行すると、EXC_BAD_ACCESSブレークが発生します。悪いメモリアクセスが発生したことを意味することを推測するのはそれほど難しいことではありませんが、C ++例外は発生せず、上記のコードではキャッチが呼び出されません。

これは悪いことのようで、C++の例外処理がほとんど役に立たなくなります。これが単なるデバッグである場合を除きます。リリースモードで実行したり、設定を変更したりした場合、これは例外として処理されますか?

4

1 に答える 1

5

まもなく:いいえ。セグメンテーション違反 (およびその他の一般的なプログラミングの誤りのいくつか) は、C++ 例外ハンドラーによってキャッチされるほど「高レベル」ではないため、プログラムはクラッシュするだけです。解決策: C++ の例外に頼らないでください。魔法のように、良いコードを考えたり書いたりすることから解放されます。彼らはそのためではありません。ポインターを逆参照する前に、ポインターが NULL でないかどうかを実際に確認する必要があります。

于 2012-10-19T17:37:11.527 に答える