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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

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

#1

投稿記事 by keito94 » 7年前

ゲームを実行しようとすると「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;
}
最後に編集したユーザー keito94 on 2017年4月06日(木) 19:27 [ 編集 1 回目 ]
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

梅衣堂ひよ
記事: 24
登録日時: 7年前

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

#2

投稿記事 by 梅衣堂ひよ » 7年前

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

コード:

new CPlayer(InitX,InitY);

コード:

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

newしたものはポインタ型変数に代入しないとポインタ型変数の参照先がnullptr(0x00000000)のままになってしまいます。
結構説明が下手ですのでご了承ください。割と言葉が足りなかったり文字だらけで分かりにくかったりします。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

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

#3

投稿記事 by keito94 » 7年前

ありがとうございます!!
newしたら、代入しないといけないのですか…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

梅衣堂ひよ
記事: 24
登録日時: 7年前

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

#4

投稿記事 by 梅衣堂ひよ » 7年前

オフトピック
newはあくまで変数の実体を生成するものであって、生成した変数を利用するためには生成した変数の存在する場所(アドレス)の入れ物(ポインタ型変数)が必要になります。
deleteはポインタ型変数に行うことによって格納しているアドレスに存在する変数を削除、メモリの解放を行うものです。
結構説明が下手ですのでご了承ください。割と言葉が足りなかったり文字だらけで分かりにくかったりします。

返信

“C言語何でも質問掲示板” へ戻る