- ベストアンサー
エラーの原因が・・・
ただいまVisualC++を使ってプログラミング中なのですが、エラーの原因が分からず困っています。 デバッグ開始(緑色のボタンをクリック)して以下のような状態になります。 エラーメッセージは「test.exe の 0x1029e9ee でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcdcdcdcd を読み込み中にアクセス違反が発生しました。」です。 エラーが出ているのは逆アセンブルのところで、main関数の終わり(}のところ)からステップインをしていった途中の「movsx ecx,byte ptr [eax]」の文でエラーが発生していることが分かりました。 この文はソースのどの部分に対応しているか分からず、困っています。 いつもは配列の添字が要素数を超えていたりするのですが、エラーの場所が場所なので原因が分かりません。 ソースコードは分割が多く、どこを載せていいのかさっぱりです。 情報が少ないので、必要な情報などありましたら言ってください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 なんとなく、スタートアップの後始末処理で例外が発生している、かも、です。 newやmallocを使っているなら、そのあたりでバッファオーバーランを起こしていないかを、重点的に調べてみましょう。 あとは問題の絞込みですね。ある特定の処理を行った場合に症状が発生する、といったことがわかれば、大きな手がかりとなるのですが。
その他の回答 (3)
- cyacya2000
- ベストアンサー率54% (39/71)
メモリ破壊が原因でしょう。 こういったときにはバイナリサーチの原理を利用してどこで異常が発生しているか調べるのも一つの手段です。 つまり、 Step1 プログラムの中盤辺りにブレイクポイントを設定して実行してみる Step2 Step1でブレイクポイントで止まる前に異常終了したら プログラムの最初から中盤までの中間(プログラムの上から1/4辺りにブレイクポイントを設定して再度実行 ブレイクポイントまできたら、プログラムの中盤から最後までの中間(プログラムの上から3/4辺りにブレイクポイントを設定して実行 以下同様に調査していけば、比較的簡単に異常終了している場所を特定できます。 これは、簡単には解らないバグを調査するときに、非常に有効な方法の一つです。 念のために、プログラムの中盤とか1/4,3/4というのは、実行順序のことを言っています。
- Tacosan
- ベストアンサー率23% (3656/15482)
とりあえずポインタでアクセスするところを精査するといいかも.
- titokani
- ベストアンサー率19% (341/1726)
「呼び出し履歴」をさかのぼっていけば、ソースに突き当たると思います。
補足
呼び出し履歴の黄色い矢印は「msvcr90d.dll!1029e9ee」を指していますが、その後どうやってさかのぼればいいのか・・・ よろしければ教えていただけると助かります。