-4

次のエラーが発生し続けます: OpenGL および GLUT の 0x009f240e で未処理の例外 - 101.exe: 0xC0000005: アクセス違反の書き込み場所 0x00000000。

ここで同様のエラーコードを含むいくつかの質問を見つけましたが、それらはすべて、NULL ポインターの逆参照が問題であると言っているようです。しかし、それが何を意味するのか、それに対して何をすべきかを本当に説明しているものを見つけることができないようです.

ここに私のコードの小さなサンプルがあります:

Tree* myTree; //global variable pointer

int main (int argc, char** argv)
{   
      fstream file = fstream ("Tree.txt");

      *myTree = Tree(file);   // This is where the error is occuring
}

これを修正するために私ができることについてアドバイスやアイデアがあれば、教えてください。他に追加すべきコードがある場合は、それもお知らせください。

4

2 に答える 2

2

これ:

*myTree = Tree(file);

初期化されていないポインタを逆参照することにより、割り当てられていないメモリに書き込みを行っています。ポインタが 0 を指しているようで、そのアドレスでの例外を説明しています。

于 2012-11-14T16:17:42.590 に答える
0

あなたがやろうとしているのは、のインスタンスを作成しTree、グローバルポインターがそれを指すmyTreeようにすることだと思います。

その場合、問題はそのインスタンスを作成して割り当てるために使用する構文にあります。*myTree実際にポインターを逆参照し、それをのコピーに割り当てようとしますTree(file)

必要なのはTreenew演算子を使用して のインスタンスを作成し、戻り値 (新しく作成されたインスタンスへのポインター) をポインター myTree (参照解除された *myTree ではなく) に割り当てることです。

int main (int argc, char** argv)
{   
      fstream file = fstream ("Tree.txt");

      myTree = new Tree(file);   // Create a new instance of Tree and store its pointer in myTree
}

operator newで作成されたメモリは、使い終わったらを呼び出しdeleteて解放することを忘れないでくださいmyTree

于 2012-11-14T16:26:12.530 に答える