ページ 11

動作停止の理由

Posted: 2010年9月11日(土) 16:41
by Ultimate
#include "DxLib.h"

#define PI 3.14159265358979323846264338327950288419

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了

SetWindowSizeChangeEnableFlag( TRUE ) ;



SetDrawScreen(DX_SCREEN_BACK);

//色の設定
int WHITE,BLACK,RED,GREEN,BLUE;

WHITE = GetColor(255,255,255);
BLACK = GetColor(0,0,0);
RED = GetColor(255,0,0);
GREEN = GetColor(0,255,0);
BLUE = GetColor(0,0,255);

//その他変数
int i,j;
char key[256];

int maintekiimage;
maintekiimage=LoadGraph("back.png");


//構造体作成
//敵の弾1
typedef struct{
int x[100]; //X座標
int y[100]; //Y座標
int r[100]; //ラジアン値
int flag[100]; //フラグ
int count[100]; //ループカウント
}ch_t;
ch_t tt1;




//初期化
//敵の弾1
for(i=0;i<=99;i++){
tt1.x=0;
tt1.y=0;
tt1.r=2*PI/(99/i);
tt1.flag=0;
}

//メイン敵描画
DrawCircle(320,240,5,BLACK);


WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}



とりあえず実験的に画面の中央に円を表示させてみようとしているのですが、実行すると動作を停止します。

なぜでしょうか?

メイクは成功するのですが、実行すると失敗します。

Re:動作停止の理由

Posted: 2010年9月11日(土) 16:49
by へろりくしょん
> tt1.r=2*PI/(99/i);
この部分ですね。

このコードが現れるループは for(i=0;i<=99;i++) となっており、ループカウンタの変数 i は0から始まります。

99/i のコードは 99/0 となり、0で除算を行った場合の動作は未定義です。


こういうのはとりあえず、1行1行トレースしてみると一発ですよ。

ソースレベルデバッガの導入を強くお勧めします。

Re:動作停止の理由

Posted: 2010年9月11日(土) 16:50
by Tororo
cahr Key[256]の 未初期化では?

(検証してません)


追記ーーーーーーーーーーーーーーーーーーーーー

原因違いましたね^^;
失礼しました。

ただ、初期化はしておかれたほうが良いと思います。 画像

Re:動作停止の理由

Posted: 2010年9月11日(土) 17:28
by Ultimate
無事成功しました。

以下に変更後のソースも載せておきます!

#include "DxLib.h"

#define PI 3.14159265358979323846264338327950288419

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了

SetWindowSizeChangeEnableFlag( TRUE ) ;



SetDrawScreen(DX_SCREEN_BACK);

//色の設定
int WHITE,BLACK,RED,GREEN,BLUE;

WHITE = GetColor(255,255,255);
BLACK = GetColor(0,0,0);
RED = GetColor(255,0,0);
GREEN = GetColor(0,255,0);
BLUE = GetColor(0,0,255);

//その他変数
int i,j;
char key[256];

int maintekiimage;
maintekiimage=LoadGraph("back.png");


//構造体作成
//敵の弾1
typedef struct{
int x[100]; //X座標
int y[100]; //Y座標
int r[100]; //ラジアン値
int flag[100]; //フラグ
int count[100]; //ループカウント
}ch_t;
ch_t tt1;




//初期化
//敵の弾1
for(i=0;i<=99;i++){
tt1.x=0;
tt1.y=0;
if(i>0){
tt1.r=2*PI/(99/i);
}else tt1.r=0;
tt1.flag=0;
}

//メイン敵描画



WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}