1. ホーム
  2. c++

[解決済み] 0xC0000005: アクセス違反(場所 0x00000000 の読み込み

2022-02-18 17:30:18

質問

私が制作しているスペースインベーダーゲームで、非常に奇妙な問題が発生しています。基本的にアクセス違反のエラーが発生します。

<ブロッククオート

の 0x5edad442 (msvcr100d.dll) で未処理の例外が発生しました。 SpaceInvaders.exe: 0xC0000005: アクセス違反の読み取り場所 0x00000000.

ビジュアルスタジオでデバッグをすると、"strcmp.asm"が表示されます。私のコードでstrcmp()を使用していないことに注意してください。このコードに何か問題があるのでしょうか、それとも私が含めたものの範囲を超えている問題なのでしょうか?どんな助けでもありがとうございます。

const char* invarray[] = {"invader0.png", "invader1.png", "invader2.png", "invader3.png", "invader4.png"}; 
int i=0;
//Creates 55 invaders
for (int y=0; y<250; y+=50){
    for (int x=0; x<550;x+=50){
        Invader inv(invarray[y/50], x+50, y+550, 15, 15, 1, false, 250);
        invaders[i] = inv;
    }
}

インベーダーのコンストラクタです。

Invader::Invader(const char *pic, int x, int y, int w, int h, bool dir, bool des, int point) : MovingObject(pic, x, y, w, h) , direction(dir), destroyed(des), b(0), points(point){};

MovingObject コンストラクタ

MovingObject::MovingObject(const char *pic, int x, int y, int w, int h):picture(pic), positionX(x), positionY(y), width(w), height(h) {};

解決方法は?

この行は怪しいですね。

invaders[i] = inv;

インクリメントされることはない i に代入し続け、その結果 invaders[0] . もしこれが、コードを例題に縮小した際の単なるミスであれば、以下の計算方法を確認してください。 i のサイズをオーバーしている可能性があります。 invaders .

もし、あなたのコメントにあるように、あなたが55の invaders であることを確認します。 invaders は、この数字を処理するために正しく初期化されています。