変数になぜかおかしな値が入ってしまいます
Posted: 2009年5月14日(木) 23:52
連日に投稿してすみません。
Visual Studio 2008 Express EditionとDXライブラリを使って、ゲーム(と呼べるレベルのものではまだありませんが)を作っています。
コンパイルはちゃんとできるのですが次のようなエラー?がでて、対処が分かりません。
Game2.exe の 0x004012e6 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xc07fd410 を読み込み中にアクセス違反が発生しました。
エラーメッセージで検索もしてはみたのですが自分には書いてあることの意味が理解できませんでした。
エラーメッセージと同時に表示される情報を見ておかしいと思ったのが、char.ccpの
if(*(p_block+(ch.y/32+1)*20+(ch.x/32+1))==1 && ch.sky==1){
のあたり(直前?)でch.yになぜか-2147483296が代入されているらしいということなのですが、なぜそんな数が代入されてしまうのかが分からず、そもそもそれが原因であるかどうかも確信できません。
解決法を教えてください。
//main.ccp
#include "DxLib.h"
#include "Keys_Blocks.h"
void char_coord(int *Key,int *p_block);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
//Loading pics
int back_i=0;
int ground=LoadGraph("Stones.png");
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//Back
LoadGraphScreen(-back_i,0,"virgo.jpg",FALSE);
if(back_i>1080-680)LoadGraphScreen(1080-back_i,0,"virgo.jpg",FALSE);
if(back_i>1080)back_i=0;
back_i++;
//Ground
int ground=LoadGraph("stones.png");
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
if(block[j]==1)DrawGraph(i*32,j*32,ground,TRUE);
}
}
//draw_char
char_coord(Key,p_block);
ScreenFlip();
}
DxLib_End();
return 0;
}
Visual Studio 2008 Express EditionとDXライブラリを使って、ゲーム(と呼べるレベルのものではまだありませんが)を作っています。
コンパイルはちゃんとできるのですが次のようなエラー?がでて、対処が分かりません。
Game2.exe の 0x004012e6 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xc07fd410 を読み込み中にアクセス違反が発生しました。
エラーメッセージで検索もしてはみたのですが自分には書いてあることの意味が理解できませんでした。
エラーメッセージと同時に表示される情報を見ておかしいと思ったのが、char.ccpの
if(*(p_block+(ch.y/32+1)*20+(ch.x/32+1))==1 && ch.sky==1){
のあたり(直前?)でch.yになぜか-2147483296が代入されているらしいということなのですが、なぜそんな数が代入されてしまうのかが分からず、そもそもそれが原因であるかどうかも確信できません。
解決法を教えてください。
//main.ccp
#include "DxLib.h"
#include "Keys_Blocks.h"
void char_coord(int *Key,int *p_block);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
//Loading pics
int back_i=0;
int ground=LoadGraph("Stones.png");
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//Back
LoadGraphScreen(-back_i,0,"virgo.jpg",FALSE);
if(back_i>1080-680)LoadGraphScreen(1080-back_i,0,"virgo.jpg",FALSE);
if(back_i>1080)back_i=0;
back_i++;
//Ground
int ground=LoadGraph("stones.png");
for(int i=0;i<20;i++){
for(int j=0;j<15;j++){
if(block[j]==1)DrawGraph(i*32,j*32,ground,TRUE);
}
}
//draw_char
char_coord(Key,p_block);
ScreenFlip();
}
DxLib_End();
return 0;
}