ページ 11

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

Posted: 2012年6月12日(火) 20:17
by miya
環境
Windows7
VC++2010

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

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

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

Posted: 2012年6月12日(火) 20:26
by h2so5
原因の関数がわかっているなら、そのソースを貼ってもらったほうが早く解決すると思います。

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

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

Posted: 2012年6月12日(火) 22:04
by miya
このようなコードになってます。

コード:

// オブジェクト構造体
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 の呼び方が問題でしょうか?

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

Posted: 2012年6月12日(火) 22:33
by softya(ソフト屋)
この情報だけだと分かりませんが、
bool CCollision::CollisionWall2でreturn 値;が書いてませんが大丈夫ですか?