どうもC++歴3か月の学生です。DXライブラリを使ってSTGを作っているんですがデバックを行うとハンドルされない例外が
「ハンドルされない例外が 0x74F6C9F1 (STG2.exe) で発生しました: 0xC0000005: 場所 0x00000000 の実行中にアクセス違反が発生しました。」と出て wntdll.pdbは読み込まれていません とでます。ログも出力されないので何をどうすればいいのかわかりません。如何すればよいのかだれかご教示ください。
ハンドルされない例外
Re: ハンドルされない例外
例外というのは。コンパイルエラーではないが、処理としておかしいもの(説明力がないので。意味不明ですいません)のことを指します。
解決法は、例外が起きた部分のコードがないと何とも言えません。
コードを提示していただけるとアドバイス等ができます
解決法は、例外が起きた部分のコードがないと何とも言えません。
コードを提示していただけるとアドバイス等ができます
Re: ハンドルされない例外
すみません。正直自分でもそのコードの場所がよくわかっておりません。
なのでお手数をおかけいたしますが、「こうすればそのコードが出る」のようなことをご教示いただけると幸いです。
とりあえず、これかな?と思うところを手当たり次第に貼って行きたいと思います。
私は、学校でプログラムを作っているので、家では確認できると思いますが、返信等ができなくなると思います。
なのでお手数をおかけいたしますが、「こうすればそのコードが出る」のようなことをご教示いただけると幸いです。
とりあえず、これかな?と思うところを手当たり次第に貼って行きたいと思います。
私は、学校でプログラムを作っているので、家では確認できると思いますが、返信等ができなくなると思います。
#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
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ハンドルされない例外
VisualStudoでデバッグビルドでデバッグ開始すれば該当の問題が起こった行で停止させることが出来ます。
ハンドルされない例外のウィンドウが出たら継続してブレークする。
ハンドルされない例外のウィンドウが出たら継続してブレークする。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ハンドルされない例外
試してみたところ
LoadDivGraphのところに矢印が表示されました。
矢印のところにカーソルを合わせると「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」と出ました。
それと例外のハンドルのところのウィンドウの継続を押してみたところ tidrable.c というところが開きました。 tidrable.c は読み取り専用でした。
#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();
}
矢印のところにカーソルを合わせると「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」と出ました。
それと例外のハンドルのところのウィンドウの継続を押してみたところ tidrable.c というところが開きました。 tidrable.c は読み取り専用でした。
Re: ハンドルされない例外
お騒がせして申し訳ありません。解決しました。
例外のハンドルのエラー文をネットで調べていると0x00000000が関係してエラーが出ているのは初期化を大体忘れているということでしたのでもう一度よく見てみたところ最初DXライブラリを初期化すると書いたところの前にDXライブラリの関数を使うコードを入れていたためこの例外のハンドルというものが出ておりました。
本当にお騒がせして申し訳ありませんでした。
例外のハンドルのエラー文をネットで調べていると0x00000000が関係してエラーが出ているのは初期化を大体忘れているということでしたのでもう一度よく見てみたところ最初DXライブラリを初期化すると書いたところの前にDXライブラリの関数を使うコードを入れていたためこの例外のハンドルというものが出ておりました。
本当にお騒がせして申し訳ありませんでした。