1

このコードは正しく実行されますが、不特定の瞬間に行で例外アクセス違反が発生します

return lhs.getGeneralType()->getID() != rhs.getGeneralType()->getID();

そして、エラーが私のアプリケーションを壊します... iveはすでに/EHaでコンパイルしようとしましたが、エラー

繰り返し...このコード行は何度も正しく実行され、しばらくするとこのエラーが発生します..

if (lhs.getType() == rhs.getType()) {

    try {

        if (lhs.getGeneralType() != NULL && lhs.getGeneralType() != NULL)
            return lhs.getGeneralType()->getID() != rhs.getGeneralType()->getID();
        else if (lhs.getGeneralType() == NULL && lhs.getGeneralType() == NULL)
            return false;
        else if (lhs.getGeneralType() != NULL && lhs.getGeneralType() == NULL)
            return false;
        else if (lhs.getGeneralType() == NULL && lhs.getGeneralType() != NULL)
            return true;
        else
            return true;

    } catch(char * e) { // tried also exception & , char* e
        return true;
    }   
} else
    return true;

getGeneralType() が返す Type の定義は以下のとおりです

  class Type
  {
  private:
    int _id;
  public:
    Type(int id);
    operator int() const;
    int getID() const;
  };
4

2 に答える 2

4

if文のスペルミスのようです

if (lhs.getGeneralType() != NULL && lhs.getGeneralType() != NULL)

の 1 つは、lhsおそらく である必要がありますrhs

于 2012-08-22T17:49:13.863 に答える
3
if (lhs.getGeneralType() != NULL && lhs.getGeneralType() != NULL)

コピー アンド ペースト エラーが発生しました。それは次のようになります。

if (lhs.getGeneralType() != NULL && rhs.getGeneralType() != NULL)
                                    ^

他の比較についても同様です。

その結果、null ポインターを参照していたため、未定義の動作が発生していました。この場合、アクセス違反です。catchこれは C++ の例外ではないため、ブロックでは処理できません。__tryMicrosoft の C++ 方言は、これら (および、おそらく)をキャッチして回復するための非標準的な方法を提供していると思います__catchが、そのようなナンセンスを使用するよりも、バグを修正する方がはるかに優れています。

于 2012-08-22T17:49:26.977 に答える