環境
Windows7
VC++2010
DXライブラリを使ってゲームのプログラムを組んでいるのですが、
あるクラスのメンバ関数を呼んだ瞬間に
「0x01104f77 でハンドルされていない例外が発生しました: 0xC00000FD: Stack overflow」
というエラーメッセージが表示されてしまいました。
どうしたらよいのか、分からずにいます。
ざっくりした質問ですみませんが、問題としてどういったことが考えられるでしょうか?
また、どのようにしたら解決できるでしょうか?
関数を呼んだ瞬間にエラーメッセージが出る
Re: 関数を呼んだ瞬間にエラーメッセージが出る
原因の関数がわかっているなら、そのソースを貼ってもらったほうが早く解決すると思います。
考えられる原因としては、
・関数内で非常に大きい配列を宣言している
・再帰呼び出しが深すぎる
などがあります。
考えられる原因としては、
・関数内で非常に大きい配列を宣言している
・再帰呼び出しが深すぎる
などがあります。
-
miya
Re: 関数を呼んだ瞬間にエラーメッセージが出る
このようなコードになってます。
ちなみに先ほど一応は動くようになりました。
CollisionWall2()の引数を
と、上記のように全部 int で受け取ってみたらうまくいきました。
スタックのオーバーフローではなくて、
tile の呼び方が問題でしょうか?
// オブジェクト構造体
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()の引数を
と、上記のように全部 int で受け取ってみたらうまくいきました。
スタックのオーバーフローではなくて、
tile の呼び方が問題でしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 関数を呼んだ瞬間にエラーメッセージが出る
この情報だけだと分かりませんが、
bool CCollision::CollisionWall2でreturn 値;が書いてませんが大丈夫ですか?
bool CCollision::CollisionWall2でreturn 値;が書いてませんが大丈夫ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。