使用OSはXPで、コンパイラはVC++ 2008 EE です。
これまでは、まずサンプルプログラミングを見ずに自分で考えてみて、答え合わせのような形でサンプルと見比べる・・・と言うようなやり方で、上手く進んでいたのですが、22章にてつまづいてしまいました。
今までは、~行のプログラミングが間違っているよ、と言う表記がでたのですすっといっていて、今回も1回でたので、それを直してコンパイルに成功、と思いきや、以下のメッセージがでました。
test.exe の 0x0056c1bc でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xccdfcb94 を読み込み中にアクセス違反が発生しました。
初めて見たエラーメッセージなので、びっくししたのもあるんですが、これじゃあどこが間違っているか分かりません。
1行目からサンプルプログラミングとかなり長い時間にらめっこしてみても、違いが分かりませんでした。
サンプルプログラミングをコピー&ペーストしてみたら実行できたので、プログラミングの間違いだとは分かったのですが、どこが間違っているかさっぱり分かりません。
これができなかったらどう、という訳ではないのですが、やはりここをきちんと理解して次に進むのと、理解せずに曖昧に次に進むのとではやはり後々つまづく原因になりそうなので、理解して次に進みたいんです。
どこが間違っているかを教えて頂ければ幸いです。
自分が打ち込んだプログラミング
#include "DxLib.h" typedef struct{ int x,y,img,muki,walking_flag; }ch_t; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int image[16]; char key[256]; ch_t ch; if(ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理 ch.x =320; ch.y =240; SetDrawScreen(DX_SCREEN_BACK); LoadDivGraph("char.png",16,4,4,32,32,image); while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(key) && !key[KEY_INPUT_ESCAPE]){ if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力受付 ch.walking_flag=1; //歩くフラグ立てる if(key[KEY_INPUT_UP]==1) //上キー押してたら ch.muki=0; //上向きフラグ立てる else if(key[KEY_INPUT_LEFT]==1) //左キー押してたら ch.muki=1; //左向きフラグ立てる else if(key[KEY_INPUT_DOWN]==1) //下キー押してたら ch.muki=2; //下向きフラグ立てる else if(key[KEY_INPUT_RIGHT]==1)//右キー押してたら ch.muki=3; //右向きフラグ立てる else //何も押してなかったら ch.walking_flag=0; //歩かないフラグ立てる } if(ch.walking_flag==1){ if(ch.muki==0) ch.y--; else if(ch.muki==1) ch.x--; else if(ch.muki==2) ch.y++; else if(ch.muki==3) ch.x++; } ch.img = image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //時に応じた画像をセット DrawGraph(ch.x,ch.y,ch.img,TRUE); //描画 ScreenFlip(); } WaitKey(); DxLib_End(); return 0; }