ページ 1 / 1
ジョイパッドの入力のデバックでアクセス違反が発生した。
Posted: 2017年4月06日(木) 19:12
by keito94
ゲームを実行しようとすると「0x00EEAC96 で例外がスローされました (スタアド.exe 内): 0xC0000005: 場所 0x00000038 の読み取り中にアクセス違反が発生しました
プログラム '[3544] スタアド.exe' はコード 0 (0x0) で終了しました。」というエラーがしてしまいます。自動変数のthisを調べてみたところ、CPlayer *の0x00000000を示しています。
http://dixq.net/forum/viewtopic.php?f=3&t=16537#p130003のようなC言語の基礎知識のミスでもないし…。
コード:
void CPlayer::Update(void) {
{
int i;
i = GetJoypadInputState(DX_INPUT_KEY_PAD1);
EdgeInput = i & ~Input;//ここで例外が発生する
Input = i;
}
VX = 0.0F;
//キャラの動きを入れる。
if ((Input&PAD_INPUT_RIGHT)) {
Dir = FALSE;
VX = 2.5F;
}
if ((Input&PAD_INPUT_LEFT)) {
Dir = TRUE;
VX = -2.5F;
}
X += VX;
}
Re: ジョイパッドの入力でアクセス違反が発生した。
Posted: 2017年4月06日(木) 19:26
by 梅衣堂ひよ
Main.cppの30行目だったかな?
コード:
new CPlayer(InitX,InitY);
を
コード:
Player = new CPlayer(InitX,InitY);
にすれば解決すると思います。
newしたものはポインタ型変数に代入しないとポインタ型変数の参照先がnullptr(0x00000000)のままになってしまいます。
Re: ジョイパッドの入力のデバックでアクセス違反が発生した。
Posted: 2017年4月06日(木) 19:35
by keito94
ありがとうございます!!
newしたら、代入しないといけないのですか…。
Re: ジョイパッドの入力のデバックでアクセス違反が発生した。
Posted: 2017年4月06日(木) 20:02
by 梅衣堂ひよ
オフトピック
newはあくまで変数の実体を生成するものであって、生成した変数を利用するためには生成した変数の存在する場所(アドレス)の入れ物(ポインタ型変数)が必要になります。
deleteはポインタ型変数に行うことによって格納しているアドレスに存在する変数を削除、メモリの解放を行うものです。