連日ですみませんが、質問したいことがあります。
環境はWin7、VC++2008EEです。
C言語初心者です。
僕は龍神録のコードを参考に勉強させていただいているのですが、プログラミングの館のタイトルセレクトを加えてみようと思い、実装しようとコードを書いたのですが、実行はされるものの十数秒経つと終了し、
「実験.exe の 0x00f496ae でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 に書き込み中にアクセス違反が発生しました。」と表示され、また呼び出し履歴には 「[下のフレームは間違っているか、または見つかりません。kernel32.dll に対して読み込まれたシンボルはありません。] 」と表示されてしまいます。
タイトルセレクトを行う関数を加えようとしてこうなったため、その関数が原因だとおもうのですが、ここ何日か、デバッガを使って配列や変数をしらべても、原因がどうしてもわかりません。
判断に必要だと思うコードを貼りますので、ご指摘をお願いしたいのです。
main.cpp
#define GLOBAL_INSTANCE
#include "GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0) return -1;
if(ClearDrawScreen()!=0) return -1;
GetHitKeyStateAll_2();
GetHitPadStateAll();
return 0;
}
//タイトルセレクト
void TitleSelect(){
Menumozi_t Menumozi[5]={
{80,100,"ゲームスタート"},
{100,150,"おまけ"},
{100,200,"サウンド"},
{100,250,"コンフィグ"},
{100,300,"ゲーム終了"},
};
static int SelectNum;
if(CheckStateKey(KEY_INPUT_DOWN)==1){
SelectNum = (SelectNum+1)%5;
for(int i=0;i<5;i++){
if(i==SelectNum){
Menumozi[i].x = 80;
}
else{
Menumozi[i].x = 100;
}
}
}
for(int i=0;i<5;i++){
DrawFormatString(Menumozi[i].x,Menumozi[i].y,GetColor(255,255,255),Menumozi[i].name);
}
printfDx("%d",SelectNum);
if(SelectNum==0 && CheckStateKey(KEY_INPUT_Z)>0){
func_state=99;
}
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessLoop()==0 ){
if(CheckStateKey(KEY_INPUT_ESCAPE)==60)break;
music_ini();
switch(func_state){
case 0:
load();
first_ini();
DrawGameTitle();
TitleSelect();
break;
case 99://STGを始める前に行う初期化
ini();
load_story();
func_state=100;
break;
case 100:
calc_ch();
ch_move(); //キャラクタの移動制御
cshot_main();
enemy_main();
shot_main();//ショットメイン
boss_shot_main();
out_main();
effect_main();//エフェクトメイン
graph_main();
if(boss.flag==0)
stage_count++;
break;
default:
printfDx("不明なfunc_state\n");
break;
}
music_play();
ScreenFlip();
count++;
}
DxLib_End();
return 0;
}