0xc0000005エラー

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

0xc0000005エラー

#1

投稿記事 by YYSS » 13年前

自作STGをつくっているものです。

~開発環境~
○Windows Vista Home Premium SP2
○Visual C++ 2010 Express
○DXライブラリ使用

今までは問題なかったのですが、急に変なエラーが出るようになってしまいまして・・・

フルスクリーンでゲームを起動すると、

「project.exeの0x00c4ab88、ハンドルされてない例外が発生:0xc0000005
場所:0x06c6f840の読み込み中にアクセス違反が発生しました」

と表示されて画面がフリーズします。
「project.exe」はゲームの実行ファイル

ウィンドウモードだと問題ないのですが、フルスクリーンだとほぼ毎回と言っていいほど発生します。
発生すると画面がフリーズして、タスクマネージャで「project.exe」を強制終了しようとしても出来ず
Visual C++を強制終了することで、やっと終了出来ます。


原因がまったく分かりません・・・

初期化でウィンドウかフルスクリーンを判断しているので、そこが怪しいと思っているのですが、
何もおかしいところが見当たらないので・・・

初期化回り

コード:

	LoadandSave( 0 );
	if( SAVE.Screen	== 1 ){
		//ウィンドウモード
		ChangeWindowMode( true );
	}
	//ウィンドウタイトル名
	SetMainWindowText( "testSTG" );
	//フルスク時の設定
	SetGraphMode( 640, 480, 32 );
	//ログなし
	SetOutApplicationLogValidFlag( false );

	// DXライブラリ初期化処理
	if( DxLib_Init() == -1 ){
		return -1 ;			// エラーが起きたら直ちに終了
	}
	//描画を裏画面
	SetDrawScreen( DX_SCREEN_BACK );
LoadandSave関数の処理

コード:

/*================================================================
	データ保存
	0	= ロード
	1	= セーブ
	2	= デリート
================================================================*/
void LoadandSave( int act ){

	char *fname = "save.dat";
	FILE *fp;
	bool res	= 0;
  
	if( act == 0 ){
   		//ファイル読み込み
		if( (fp = fopen( fname, "r" )) == NULL ){
			res	= 1;
		}
		else{
			//ファイルからデータを読み込む
			fread( &SAVE, sizeof(Data), 1, fp ) ;
		}
	}
	else if( act == 1 ){
   		//ファイル書き込み
		if( (fp = fopen( fname, "w" )) == NULL ){
			res	= 1;
		}
		else{
			fwrite( &SAVE, sizeof(Data), 1, fp );
		}
	}
	else if( act == 2 ){
   		//ファイル初期化
		if( (fp = fopen( fname, "w" )) == NULL ){
			fclose( fp );
		}
		res	= 1;
	}
	if( res	== 0 ){
		fclose( fp );
	}
	else{
		//システム初期設定
		SAVE.HiScore	= 10000;
		SAVE.ClearFlag	= 0;
		SAVE.GameLevel	= 1;
		SAVE.Remain		= 2;
		SAVE.Screen		= 1;
		//キーコンフィグ初期設定
		SAVE.ShotConf	= 2;
		SAVE.BombConf	= 3;
		SAVE.SpeedConf	= 6;
		SAVE.WeaponConf	= 1;
		SAVE.PauseConf	= 9;
	}

}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 0xc0000005エラー

#2

投稿記事 by softya(ソフト屋) » 13年前

それだけだと分かりづらいと思うのです、DXライブラリのログであるLog.txtの内容はどうなっていますか?
あとデバッガで追いかけることはできないのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
迷彩吹雪
記事: 6
登録日時: 13年前
連絡を取る:

Re: 0xc0000005エラー

#3

投稿記事 by 迷彩吹雪 » 13年前

DXライブラリのバージョンはいくつでしょうか。
DXライブラリ本家サイトにて、バージョン3.04cの修正リストに
フルスクリーンにできない解像度でウインドウモードで起動しているときにChangeWindowMode( FALSE ) ; としてフルスクリーンモードにしようとすると動作が停止してしまうバグを修正。
とあったので、最新版を入れ直すと直るかも知れません。

(引用を間違っていたので修正しました)

アバター
kimuchi
記事: 163
登録日時: 13年前
住所: 東京

Re: 0xc0000005エラー

#4

投稿記事 by kimuchi » 13年前

関係ない話ですが。
発生すると画面がフリーズして、タスクマネージャで「project.exe」を強制終了しようとしても出来ず
Visual C++を強制終了することで、やっと終了出来ます。
大体の場合、Visual C++のメニューから「デバッグ」→「デバッグの停止」でプログラムを終了できます。

アバター
YYSS
記事: 125
登録日時: 13年前
連絡を取る:

Re: 0xc0000005エラー

#5

投稿記事 by YYSS » 13年前

再起動したら発生しなくなりました

再現できなくなったのは痛い・・・
原因が分からず仕舞い・・・
softya(ソフト屋) さんが書きました: それだけだと分かりづらいと思うのです、DXライブラリのログであるLog.txtの内容はどうなっていますか?
あとデバッガで追いかけることはできないのでしょうか?
Log出力を止めていたので確認できません;;
Visual C++もフリーズ状態で、タスクマネージャの強制終了しか受け付けない状態でした。
迷彩吹雪 さんが書きました: とあったので、最新版を入れ直すと直るかも知れません。
念のため最新版にしました。
kimuchi さんが書きました: 大体の場合、Visual C++のメニューから「デバッグ」→「デバッグの停止」でプログラムを終了できます。
Visual C++もフリーズ状態で、タスクマネージャの強制終了しか受け付けない状態でした。
Windows自体がフリーズしてたような気もする・・・

タスクバーボタンも押しても反応無しで
Ctrl + Alt + Escも反応無く、
Ctrl + Alt + Delで無理やりタスクマネージャを呼んでやっと終了できた状態

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 0xc0000005エラー

#6

投稿記事 by ISLe » 13年前

0xc0000005エラーはメモリの不正アクセスが原因です。
構造体まるごとファイルに読み書きしているのにバイナリモードではないのですが大丈夫ですかね。
フルスクリーンとは関係ないかもしれないですけど。

あとタスクマネージャの呼び出しはCtrl+Shift+Escです。

アバター
YYSS
記事: 125
登録日時: 13年前
連絡を取る:

Re: 0xc0000005エラー

#7

投稿記事 by YYSS » 13年前

ISLe さんが書きました:0xc0000005エラーはメモリの不正アクセスが原因です。
構造体まるごとファイルに読み書きしているのにバイナリモードではないのですが大丈夫ですかね。
一応バイナリで読み書きするようにしました。
これが、解決に繋がってくれれば良いのですが・・・

いまのところ出なくなったので、解決にしておきたいと思います。

閉鎖

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