1

此代码运行正确,但在一个不确定的时刻,我在行遇到异常访问冲突

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

并且错误破坏了我的应用程序...我已经尝试使用/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() 返回的类型定义如下

  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)

其中之一lhs应该是rhs

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

您有一个复制和粘贴错误。那应该是:

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

对于其他比较也是如此。

结果,您引用了一个空指针,给出了未定义的行为;在这种情况下,访问冲突。这不是 C++ 异常,因此不能用catch块处理。我相信微软的 C++ 方言提供了一些非标准的方法来捕捉和恢复这些(__try并且__catch可能),但修复错误比使用那种废话要好得多。

于 2012-08-22T17:49:26.977 回答