ページ 1 / 1
関数を呼んだ瞬間にエラーメッセージが出る
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 値;が書いてませんが大丈夫ですか?