2011-09-23 19 views
6

私は2つのクラスAとBarを持っていますが、どちらも本質的にFoo * fooを持つヘッダーファイルを共有しています。クラスAは、オブジェクトバー*バーをインスタンス化します。これは正常に動作します。しかし、私はオブジェクトのインスタンス化を行う場合アクセス違反の読み取り場所は0x00000000です。 「新しい」キーワード?

Bar* bar = new Bar(); 

barがfooで何かをしようとすると、アクセス違反が発生します。なぜこれが違いになるのですか?

私は 'new'を使用しないとうまくいきます。これはエラーです:

Unhandled exception at 0x003c17ea in Direct3DTutorial7.exe: 0xC0000005: Access violation reading 
location 0x00000000. 

ありがとうございます。

+7

ヘッダーファイルを含めることはできますか? – riwalk

+1

デバッガで実行し、コールスタックを使用してクラッシュポイントを見つけ、関連するコード部分を追加します。 –

+1

これは、nullポインタを間接参照しようとしている可能性が最も高いことを意味します。 – Jesper

答えて

13
0xC0000005: Access violation reading location 0x00000000. 

これは、あなたがBarのコンストラクタでありそうなNULLポインタを逆参照、またはこのコンストラクタによって呼び出された他のいくつかのコードでていることを意味します。デバッガを使用して、正確にどこを決定しますか。

0

Fooオブジェクトを割り当てていないと思います。これはグローバル変数であるため、プログラム起動時にゼロに初期化されます。ポインタはNULL値に対応します。

0

Fooオブジェクトを作成してfooポインタに割り当てることを覚えましたか?あなたのBarコンストラクタがfooで何かをしようとしているように聞こえますが、あなたはFooオブジェクトをまだ作成していません。

関連する問題