提前致歉,因为我什至不确定如何表达这个问题,但我正在做家庭作业(这个问题与它无关,只是我在做作业时遇到了问题)并且遇到了某些问题(这只是一个提取和概括,我遗漏了析构函数等...):
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 实例的存在? 我一开始问这个的原因是因为当我在我原来的程序中注释掉静态变量行时,程序运行正常。但是,在尝试此代码(或多或少地模拟了我正在做的事情)之后,删除静态变量行没有任何区别,它仍然会出错。
这可能很简单,但我不知道哪里出了问题。非常感谢您的帮助。
最佳答案
在使用之前检查指针。
int main()
{
Bar BAR;
Foo *pFoo = BAR.getFoo();
if (pFoo && pFoo->getID())
{
// do something
}
return 0;
};
关于C++ 无法将 NULL 指针设置为包含对象的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599514/