無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hiro

無題

#1

投稿記事 by hiro » 16年前

構造体のメンバについて質問です。
「シューティングゲームの館」を参考にして、敵ショット構造体を作りました。
//敵ショット
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
です。よろしくお願いします。

Justy

Re:無題

#2

投稿記事 by Justy » 16年前


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

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

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

hiro

Re:無題

#3

投稿記事 by hiro » 16年前

配列やポインタ等見直しましたが、これといっておかしなところは見つけられませんでした。

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

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

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

SCI

Re:無題

#4

投稿記事 by SCI » 16年前

実行直後とは具体的に、WinMainに入って直後でしょうか?
例えば、WinMainの一番最初にMessageBoxを呼ぶと、メッセージボックスは表示されますか?

閉鎖

“C言語何でも質問掲示板” へ戻る