提前道歉,因为我什至不知道如何表达这个问题,但我正在做一个家庭作业(这个问题与这个问题无关,除了我在做作业时遇到了问题)并且遇到了某些问题(这只是一个提取和概括,我省略了析构函数等......):
class idType {
int _id;
public:
int getID() { return _id; }
idType(int in = -1) : _id(-1) {}
};
class Foo {
static int _count;
idType* _id; //int wrapper just for examples sake
public:
Foo() { _id = new idType(_count); ++_count; }
idType* getID() { if(_id) return _id; return NULL; } //ERROR WHEN CALLED FROM BELOW
};
class Bar {
Foo* _foo;
public:
Bar(Foo* foo = NULL) : _foo(foo) {}
Foo* getFoo() { if(_foo) return _foo; return NULL; }
};
int foo::_count = 0;
int main() {
Bar BAR;
if(BAR.getFoo()->getID() && BAR.getFoo()); //RUN TIME ACCESS VIOLATION ERROR
return 0;
};
正如我所提到的,这不是我正在使用的代码,但我相信它更清楚地表明了正在发生的事情。BAR 通过了 getFoo() 检查,所以 _foo 不是(?) NULL 但 getFoo()->getID() 在 if(_id) 处出错。
静态变量是否以某种方式阻止了指向该类类型的指针的任何 NULL 实例存在?我一开始问这个的原因是因为当我在原始程序中注释掉静态变量行时,程序运行良好。但是,在尝试了这段代码(或多或少地模拟了我正在做的事情)之后,删除静态变量行没有任何区别,它仍然会出现相同的错误。
这可能很简单,但我不知道出了什么问题。非常感谢您的帮助。