ページ 11

無題

Posted: 2009年3月21日(土) 17:33
by hiro
構造体のメンバについて質問です。
「シューティングゲームの館」を参考にして、敵ショット構造体を作りました。
//敵ショット
typedef struct{
	int flag,pattern,counter,kind;
	int up_flag;
	double mem_ex,mem_ey,mem_px,mem_py;
	ENEMY_SHOTS_t EnemyShots[ENEMY_TOTAL_SHOT_NUM];//[200]
}ENEMY_SHOT_t;
これが、GlobalVariable.h,ExternGV.hに記述してあります。
ですがこれでコンパイルして実行すると、実行直後に
「問題が発生したため、Shot4.exeを終了します。ご不便をおかけして申し訳ありません。・・・」
と表示され、プログラムが終了してしまいます。

しかし、敵ショット構造体を
//敵ショット
typedef struct{
	int flag,pattern,counter,kind;
	double mem_ex,mem_ey,mem_px,mem_py;
	ENEMY_SHOTS_t EnemyShots[ENEMY_TOTAL_SHOT_NUM];//[200]
}ENEMY_SHOT_t;
に変更すると、プログラムは問題なく動作します。
up_flagはプログラム内のどこからもアクセスされていません。(検索で確認済みです)

どうしてこのようなことが起きるのか、はじめに記した構造体を使うにはどうすればよいか教えてください。

環境はOS:Windows XP Home Edition SP2
コンパイラ:Borland C++ Compiler 5.5
です。よろしくお願いします。

Re:無題

Posted: 2009年3月21日(土) 19:30
by Justy

>どうしてこのようなことが起きるのか

 確保された領域の外に対して書き込みを行ったとか、プログラムの領域以外のメモリを
実行しようとしたとか。

 まずは配列系を見直して、領域外にアクセスしているところがないか、
調べてみてはどうでしょうか。

Re:無題

Posted: 2009年3月24日(火) 23:08
by hiro
配列やポインタ等見直しましたが、これといっておかしなところは見つけられませんでした。

そこでデバッガを使おうとしましたが、Turbo Debugger 5.5は使い方がよくわからなかったので、
Visual C++ 2008 Express Editionをインストールしてコンパイルしたところ、
エラーも出ず動いてしまいました。

・・・一体何があったのでしょうか

やはり根本的な解決にはなっていないと考えるべきですか?

Re:無題

Posted: 2009年3月24日(火) 23:54
by SCI
実行直後とは具体的に、WinMainに入って直後でしょうか?
例えば、WinMainの一番最初にMessageBoxを呼ぶと、メッセージボックスは表示されますか?