ジョイパッドの入力のデバックでアクセス違反が発生した。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ジョイパッドの入力のデバックでアクセス違反が発生した。

Re: ジョイパッドの入力のデバックでアクセス違反が発生した。

#4

by 梅衣堂ひよ » 8年前

オフトピック
newはあくまで変数の実体を生成するものであって、生成した変数を利用するためには生成した変数の存在する場所(アドレス)の入れ物(ポインタ型変数)が必要になります。
deleteはポインタ型変数に行うことによって格納しているアドレスに存在する変数を削除、メモリの解放を行うものです。

Re: ジョイパッドの入力のデバックでアクセス違反が発生した。

#3

by keito94 » 8年前

ありがとうございます!!
newしたら、代入しないといけないのですか…。

Re: ジョイパッドの入力でアクセス違反が発生した。

#2

by 梅衣堂ひよ » 8年前

Main.cppの30行目だったかな?

コード:

new CPlayer(InitX,InitY);

コード:

Player = new CPlayer(InitX,InitY);
にすれば解決すると思います。

newしたものはポインタ型変数に代入しないとポインタ型変数の参照先がnullptr(0x00000000)のままになってしまいます。

ジョイパッドの入力のデバックでアクセス違反が発生した。

#1

by keito94 » 8年前

ゲームを実行しようとすると「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;
}

ページトップ