質問の言い方がよくわからないので、前もってお詫びしますが、宿題に取り組んでいたときに(課題に取り組んでいる問題に遭遇したことを除いて、質問は無関係です)、特定の問題に遭遇しました(これは単なる抽出と一般化であり、デストラクタなどを省略しました...):
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 インスタンスが存在しないようにしていますか? 最初に質問した理由は、元のプログラムの static 変数行をコメントアウトしたところ、プログラムが正常に動作したためでした。ただし、このコードを試した後 (これは、私が行っていることを多かれ少なかれエミュレートします)、静的変数行を削除しても違いはありませんが、それでも同じように失敗します。
これは単純かもしれませんが、何が悪いのか途方に暮れています。助けてくれてありがとう。