関数を呼んだ瞬間にエラーメッセージが出る

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

関数を呼んだ瞬間にエラーメッセージが出る

#1

投稿記事 by miya » 14年前

環境
Windows7
VC++2010

DXライブラリを使ってゲームのプログラムを組んでいるのですが、
あるクラスのメンバ関数を呼んだ瞬間に
「0x01104f77 でハンドルされていない例外が発生しました: 0xC00000FD: Stack overflow」
というエラーメッセージが表示されてしまいました。

どうしたらよいのか、分からずにいます。
ざっくりした質問ですみませんが、問題としてどういったことが考えられるでしょうか?
また、どのようにしたら解決できるでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 関数を呼んだ瞬間にエラーメッセージが出る

#2

投稿記事 by h2so5 » 14年前

原因の関数がわかっているなら、そのソースを貼ってもらったほうが早く解決すると思います。

考えられる原因としては、
・関数内で非常に大きい配列を宣言している
・再帰呼び出しが深すぎる
などがあります。

miya

Re: 関数を呼んだ瞬間にエラーメッセージが出る

#3

投稿記事 by miya » 14年前

このようなコードになってます。

コード:

// オブジェクト構造体
struct sObject{
	Point2D pos, prev, vec;		// 座標、前の座標、ベクトル
	float speed, angle, g;			// 速度、角度、重力加速度
	int r;						// 半径
	eCOLLISION_TYPE coll_type;	// 衝突時の反応フラグ
};

// 座標構造体
struct Point2i{
	int x, y;
};

// 壁との衝突チェック(当たっていたらマス座標を返す)
bool CCollision::CollisionWall2(int next_x, int next_y, int r, Point2i *ret) 
{
	~~~
	*ret = Vector2i::Create( _x, _y );// 座標を返す
 }

// 壁との衝突総チェック:手順① 移動後のオブジェクトを返す
bool CCollision::CollisionWall(sObject *obj)
{
	Point2i tile = {0.0f,0.0f};								// タイルの座標(マス座標)

	//X座標の衝突判定 (Y座標は前回の位置でチェック)
	// ★★★ ↓ を呼び出した瞬間にエラーメッセージが出る ★★★
	if( CollisionWall2(obj->pos.x, obj->prev.y, obj->r, &tile) ){	// 壁との衝突チェック
		~~~
	}
}
ちなみに先ほど一応は動くようになりました。
CollisionWall2()の引数を

コード:

bool CCollision::CollisionWall3(int next_x, int next_y, int r, int *ret_x, int *ret_y)

と、上記のように全部 int で受け取ってみたらうまくいきました。
スタックのオーバーフローではなくて、
tile の呼び方が問題でしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 関数を呼んだ瞬間にエラーメッセージが出る

#4

投稿記事 by softya(ソフト屋) » 14年前

この情報だけだと分かりませんが、
bool CCollision::CollisionWall2でreturn 値;が書いてませんが大丈夫ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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