ハンドルされない例外

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

ハンドルされない例外

#1

投稿記事 by 茶葉 » 4年前

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

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

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

#2

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

例外というのは。コンパイルエラーではないが、処理としておかしいもの(説明力がないので。意味不明ですいません)のことを指します。

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

茶葉

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

#3

投稿記事 by 茶葉 » 4年前

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

コード:

 
#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);
}

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

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

#4

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

VisualStudoでデバッグビルドでデバッグ開始すれば該当の問題が起こった行で停止させることが出来ます。
ハンドルされない例外のウィンドウが出たら継続してブレークする。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

茶葉

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

#5

投稿記事 by 茶葉 » 4年前

やり方を教えてくださってありがとうございます。では明日やってみます。

茶葉

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

#6

投稿記事 by 茶葉 » 4年前

試してみたところ

コード:

#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: ハンドルされない例外

#7

投稿記事 by 茶葉 » 4年前

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

閉鎖

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