2012-08-22 174 views
1

该代码可以正常运行,但在一个非特定时刻IM在行C++异常访问冲突

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

它看起来像if语句拼写错误

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

其中lhs的的也许应该是rhs

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

您有复制粘贴错误。这应该是:

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

和其他比较类似。

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