画像を読み込むだけでハンドルされない例外

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

画像を読み込むだけでハンドルされない例外

#1

投稿記事 by namari » 8年前

コード:

#include "../../../include/DxLib.h"

//ゲームの大きな枠組み
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
	int img_board;
    while(ProcessLoop()==0){//メインループ
		img_board=LoadGraph("dat/img/else/help.png");//ここでエラー
		ScreenFlip();//裏画面反映
	}

    DxLib_End();//DXライブラリ終了処理
    return 0;
}
特に関係ない瑣末な部分をいじっていたはずなんですが、
なぜか突然、一番最初に読み込まれる画像でハンドルの例外が出てくるようになってしまいました。
上記はなるべくほかの部分を削って、短略化したコードですが、
これでもエラーが出ます。(デバッグは通るが、起動後すぐにエラーを吐く)

エラーメッセージは
「ハンドルされない例外が0x01025F5A0で発生しました:
0xC0000005:場所0x054D1000への書き込み中にアクセス違反が発生しました。」
です。

アドバイスいただけると嬉しいです。

Rittai_3D
記事: 525
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#2

投稿記事 by Rittai_3D » 8年前

ざっと見た感じは問題が無いようです。
ちなみに、ProcessLoop() の中身はどうなっていますか?
オフトピック
直接関係ないですが、毎フレーム画像を読み込むのではなくて、メインループに入る前に読み込むべきです。
初心者です

アバター
namari
記事: 111
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#3

投稿記事 by namari » 8年前

>Rittai_3Dさん
すみません。
入れ損なってました。

コード:

#include "../../../include/DxLib.h"
 
//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    return 0;
}
//ゲームの大きな枠組み
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
    int img_board;
    while(ProcessLoop()==0){//メインループ
        img_board=LoadGraph("dat/img/else/help.png");//ここでエラー
        ScreenFlip();//裏画面反映
    }
 
    DxLib_End();//DXライブラリ終了処理
    return 0;
}
これで、全コードです。

>直接関係ないですが、毎フレーム画像を読み込むのではなくて、メインループに入る前に読み込むべきです。
確かにそうですね・・・
ちなみに今回の場合、デバッガ曰く最初の一回目でエラーを吐きます。

Rittai_3D
記事: 525
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#4

投稿記事 by Rittai_3D » 8年前

こちらの環境では再現出来ませんでした。
Windows 7 Home Premium 64bit
DxLib ver 3.14f

メインループで画像を読み込まないようにしたこのコードを試してみてください。

コード:

#include "../../../include/DxLib.h"
 
//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    return 0;
}
//ゲームの大きな枠組み
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

    int img_board=LoadGraph("dat/img/else/help.png");

    while(ProcessLoop()==0){//メインループ
        DrawGraph( 0, 0, img_board, TRUE );
        ScreenFlip();//裏画面反映
    }
 
    DxLib_End();//DXライブラリ終了処理
    return 0;
}
初心者です

Rittai_3D
記事: 525
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#5

投稿記事 by Rittai_3D » 8年前

すいません。
コンパイラは Visual Studio 2015 Community を使用しています。
以下が実験用のコードです。
► スポイラーを表示
添付ファイル
test.png
test.png (710 バイト) 閲覧数: 5510 回
初心者です

アバター
namari
記事: 111
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#6

投稿記事 by namari » 8年前

>Rittai_3D さん
起こりますね……。
どうやらコード自体の問題ではなく、外部的な問題のようです。


と思ったらやっと分かりました
datフォルダの他にdat.dxaをうっかり入れてしまったのが原因でした。
二重に画像があって混乱させたんでしょうね。

関係ないんですが、このバグ修正中にうっかりコピー前のコードを一部削除してしまったんですが、
visual C++に履歴機能はないんでしょうか……一回ウィンドウを消してしまったのでctrl+Zは使えません……。

アバター
プラム
記事: 164
登録日時: 10年前
住所: 東海地方

Re: 画像を読み込むだけでハンドルされない例外

#7

投稿記事 by プラム » 8年前

Rittai_3D さんが書きました:
オフトピック
直接関係ないですが、毎フレーム画像を読み込むのではなくて、メインループに入る前に読み込むべきです。
3Dさんの言うとうり、

コード:

#include "../../../include/DxLib.h"
 
//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    return 0;
}
//ゲームの大きな枠組み
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
    int img_board;
    img_board=LoadGraph("dat/img/else/help.png");//ここ
 
 while(ProcessLoop()==0){//メインループ
        ScreenFlip();//裏画面反映
    }
 
    DxLib_End();//DXライブラリ終了処理
    return 0;
}
とするべきです。
そうでないと、メモリを無駄に大量に使う破目になります。

それと、僕が今試してみたんですが、何の例外も起きず実行できました、
環境:Windows8.1
コンパイラ:VisualC++2010
コンパイラは何を使ってますか?
Dxライブラリのバージョンは最新ですか?
コードではない他の部分に問題があるんだと思います、

アバター
プラム
記事: 164
登録日時: 10年前
住所: 東海地方

Re: 画像を読み込むだけでハンドルされない例外

#8

投稿記事 by プラム » 8年前

namari さんが書きました: 関係ないんですが、このバグ修正中にうっかりコピー前のコードを一部削除してしまったんですが、
visual C++に履歴機能はないんでしょうか……一回ウィンドウを消してしまったのでctrl+Zは使えません……。
うーん・・・たぶんそれはもう仕方ないと思います、
もう一度最初から書き直すしかないですね・・・

Rittai_3D
記事: 525
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#9

投稿記事 by Rittai_3D » 8年前

namari さんが書きました: 関係ないんですが、このバグ修正中にうっかりコピー前のコードを一部削除してしまったんですが、
visual C++に履歴機能はないんでしょうか……一回ウィンドウを消してしまったのでctrl+Zは使えません……。
おそらく無理でしょう。 今後はバージョン管理ツールを利用するとよいかと思います。
初心者です

アバター
namari
記事: 111
登録日時: 11年前

Re: 画像を読み込むだけでハンドルされない例外

#10

投稿記事 by namari » 8年前

お二人共ありがとうございました。

閉鎖

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