四方向にキャラを歩かせるプログラムで
#include "DxLib.h"
typedef struct{
int a,b,c;
} ch_t;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
int image[16];
int muki=3; //A
int flag=0;
char Key[256];
ch_t ch;
ch.a=320;
ch.b=160;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image );//画像を分割してimage配列に保存
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(ch.a%32==0 && ch.b%32==0){
flag=1;
if(Key[KEY_INPUT_RIGHT]==1)
muki=3;
else if(Key[KEY_INPUT_LEFT]==1)
muki=1;
else if(Key[KEY_INPUT_UP]==1)
muki=0;
else if(Key[KEY_INPUT_DOWN]==1)
muki=2;
else
flag=0;
}
if(flag==1){
switch(muki){
case 3:
ch.a++;
break;
case 1:
ch.a--;
break;
case 0:
ch.b--;
break;
case 2:
ch.b++;
break;
}
}
ch.c=image[(ch.a%32+ch.b%32)/8 + muki*4];
DrawGraph( ch.a , ch.b , ch.c , TRUE ) ;//[12]の画像を描画
ScreenFlip();
}
DxLib_End();
return 0;
}
この
int muki=3;
の部分を
int muki;
にするとアクセス違反が起きるのですが、、、なぜですか?
たびたび質問すみません。。
Re:たびたび質問すみません。。
規約を守ってソースはpreタグで字下げしてください。
mukiを初期化せずにキーを押していない状態だと最初のif文でmukiが更新されないので不定値のままです。
その結果
ch.c=image[(ch.a%32+ch.b%32)/8 + muki*4];
で、範囲外にアクセスする可能性があります。
mukiを初期化せずにキーを押していない状態だと最初のif文でmukiが更新されないので不定値のままです。
その結果
ch.c=image[(ch.a%32+ch.b%32)/8 + muki*4];
で、範囲外にアクセスする可能性があります。
Re:たびたび質問すみません。。
取り合えず字下げしたソースを張ってもらえませんか。
ソースが読みにくくて間違いが見つけにくいです。
ステップ実行した場合にどこまでどの部分で違反が起こるかは調べられていますか?
ソースが読みにくくて間違いが見つけにくいです。
ステップ実行した場合にどこまでどの部分で違反が起こるかは調べられていますか?