ページ 11

ハンドルされない例外

Posted: 2015年11月25日(水) 16:36
by 茶葉
どうもC++歴3か月の学生です。DXライブラリを使ってSTGを作っているんですがデバックを行うとハンドルされない例外が
「ハンドルされない例外が 0x74F6C9F1 (STG2.exe) で発生しました: 0xC0000005: 場所 0x00000000 の実行中にアクセス違反が発生しました。」と出て wntdll.pdbは読み込まれていません とでます。ログも出力されないので何をどうすればいいのかわかりません。如何すればよいのかだれかご教示ください。

Re: ハンドルされない例外

Posted: 2015年11月25日(水) 17:08
by プラム
例外というのは。コンパイルエラーではないが、処理としておかしいもの(説明力がないので。意味不明ですいません)のことを指します。

解決法は、例外が起きた部分のコードがないと何とも言えません。
コードを提示していただけるとアドバイス等ができます

Re: ハンドルされない例外

Posted: 2015年11月25日(水) 17:53
by 茶葉
すみません。正直自分でもそのコードの場所がよくわかっておりません。
なのでお手数をおかけいたしますが、「こうすればそのコードが出る」のようなことをご教示いただけると幸いです。
とりあえず、これかな?と思うところを手当たり次第に貼って行きたいと思います。
私は、学校でプログラムを作っているので、家では確認できると思いますが、返信等ができなくなると思います。

コード:

 
#include"Ghen.h"


void csvload(){
        int n,num,i,fp;
        char fname[32]={"制御/敵の制御.csv"};
        int input[64];
        char inputc[64];

        fp = FileRead_open(fname);//ファイル読み込み
        if(fp == NULL){
                printfDx("read error\n");
                return;
        }
        for(i=0;i<2;i++)//最初の2行読み飛ばす
                while(FileRead_getc(fp)!='\n');

        n=0 , num=0;
        while(1){
                for(i=0;i<64;i++){
                        inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
                        if(inputc[i]=='/'){//スラッシュがあれば
                                while(FileRead_getc(fp)!='\n');//改行までループ
                                i=-1;//カウンタを最初に戻して
                                continue;
                        }
                        if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
                                inputc[i]='\0';//そこまでを文字列とし
                                break;
                        }
                        if(input[i]==EOF){//ファイルの終わりなら
                                goto EXFILE;//終了
                        }
                }
                switch(num){
                        case 0: enemy_order[n].cnt      =atoi(inputc);break;
                        case 1: enemy_order[n].pattern  =atoi(inputc);break;
                        case 2: enemy_order[n].knd      =atoi(inputc);break;
                        case 3: enemy_order[n].x        =atof(inputc);break;
                        case 4: enemy_order[n].y        =atof(inputc);break;
                        case 5: enemy_order[n].sp       =atof(inputc);break;
                        case 6: enemy_order[n].bltime   =atoi(inputc);break;
                        case 7: enemy_order[n].blknd    =atoi(inputc);break;
                        case 8: enemy_order[n].col      =atoi(inputc);break;
                        case 9: enemy_order[n].hp       =atoi(inputc);break;
                        case 10:enemy_order[n].blknd2   =atoi(inputc);break;
                        case 11:enemy_order[n].wait     =atoi(inputc);break;
                        case 12:enemy_order[n].ele[0]=atoi(inputc);break;
                        case 13:enemy_order[n].ele[1]=atoi(inputc);break;
                        case 14:enemy_order[n].ele[2]=atoi(inputc);break;
                        case 15:enemy_order[n].ele[3]=atoi(inputc);break;
                        case 16:enemy_order[n].ele[4]=atoi(inputc);break;
                        case 17:enemy_order[n].ele[5]=atoi(inputc);break;
                }
                num++;
                if(num==18){
                        num=0;
                        n++;
                }
        }
EXFILE:
        FileRead_close(fp);
}

Re: ハンドルされない例外

Posted: 2015年11月25日(水) 20:56
by softya(ソフト屋)
VisualStudoでデバッグビルドでデバッグ開始すれば該当の問題が起こった行で停止させることが出来ます。
ハンドルされない例外のウィンドウが出たら継続してブレークする。

Re: ハンドルされない例外

Posted: 2015年11月25日(水) 23:23
by 茶葉
やり方を教えてくださってありがとうございます。では明日やってみます。

Re: ハンドルされない例外

Posted: 2015年11月26日(木) 17:19
by 茶葉
試してみたところ

コード:

#include"DxLib.h"
#include"Ghen.h"


void Iload(){
LoadDivGraph( "画像/自機.png" , 1 , 1 , 1 , 73 , 73 ,IMB[0]); 
}

void Ivi(){
DrawRotaGraphF(MB.x,MB.y,1.0f,0.0f,IMB[0][MB.MBmg],TRUE);
}

void VEDW_MB(){
	Iload();
	Ivi();
}
LoadDivGraphのところに矢印が表示されました。
矢印のところにカーソルを合わせると「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」と出ました。
それと例外のハンドルのところのウィンドウの継続を押してみたところ tidrable.c というところが開きました。 tidrable.c は読み取り専用でした。  

Re: ハンドルされない例外

Posted: 2015年11月26日(木) 18:02
by 茶葉
お騒がせして申し訳ありません。解決しました。
例外のハンドルのエラー文をネットで調べていると0x00000000が関係してエラーが出ているのは初期化を大体忘れているということでしたのでもう一度よく見てみたところ最初DXライブラリを初期化すると書いたところの前にDXライブラリの関数を使うコードを入れていたためこの例外のハンドルというものが出ておりました。
本当にお騒がせして申し訳ありませんでした。