【问题标题】:C++ exception access violation [closed]C ++异常访问冲突[关闭]
【发布时间】:2012-08-22 17:42:17
【问题描述】:

此代码运行正常,但在某个不特定的时刻,我在行

收到了异常访问冲突
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;
  };

【问题讨论】:

    标签: c++ exception exception-handling access-violation


    【解决方案1】:

    if 语句中的拼写错误

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

    lhs 之一应该是rhs

    【讨论】:

      【解决方案2】:
      if (lhs.getGeneralType() != NULL && lhs.getGeneralType() != NULL)
      

      您遇到了复制和粘贴错误。那应该是:

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

      对于其他比较也是如此。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 2022-01-07
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多