vector standard header内でのエラー

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

vector standard header内でのエラー

#1

投稿記事 by 山崎 » 16年前

毎度お世話になっております。
この度は、vector standard header内でのエラーについてお伺いに参りました。
エディタはVisual Studio2008を使っています。

現在、今までint**に動的にメモリを確保して2次元配列にしてマップにしていたのを、
vectorにマップのデータを格納するように書きなおす作業をしております。

デバッグ中に、
0x7c812afb でハンドルされていない例外が発生しました: Microsoft C++ の例外: std::out_of_range (メモリの場所 0x0012f670)
という見慣れたエラーが発生します。
vectorの要素数よりも大きなインデックスを指定したんだろうなということはわかるんですが、
エラーを出した行がvector standard header内に一気に飛んでしまうので、
自分で作ったどのコードによるエラーなのかがわかりません。
ちなみに、エラー箇所はvector standard headerの
_THROW(out_of_range, "invalid vector<T> subscript");
の行を指しています。
実行してきたコードを逆に一行ずつたどっていく、というような仕組みでもあればいいのですが…。

このマップのデータを格納したvectorはグローバルでいろんな場所で使われていて、
マップを描画するときなどはfor文によって何百回と呼び出されますし、
フィールドに置いてあるたくさんのオブジェクトや敵もこのデータを使って行動しています。
一行ずつステップ実行していってエラー箇所を実行するまで探す、
というのは非常に手間がかかってしまいます。

このvectorによるエラーが自分で作ったコードのどの行で起こったのか、
効率よく調べる方法はあるのでしょうか。
それとも、ステップ実行してエラー箇所を探すなど地道な方法しかないでしょうか。

御津凪

Re:vector standard header内でのエラー

#2

投稿記事 by 御津凪 » 16年前

エラーが発生し、vector standard header内に飛んだ状態で、
メニューの デバッグ→ウインドウ→呼び出し履歴
を選択する(あるいはショートカットキー Alt+7 を押す)と、
現在の関数の呼び出した履歴が表示されますので、
自分で作ったコードの場所でダブルクリックすればそこに場所が移るので、
そこでエラーが発生した場所を把握できます。
(エラーによっては表示されない場合もあります)

山崎

Re:vector standard header内でのエラー

#3

投稿記事 by 山崎 » 16年前

>御津凪さん
非常に素早いご返信、本当にありがとうございます。
御津凪さんのおっしゃる通りにやってみたところ、見事にエラーが判明しました。
こんな方法があったのかと感動すると同時に、VisualStudioを分かっていない自分が恥ずかしいです。

本当にどうもありがとうございました。

閉鎖

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