都道府県穴埋めゲーム

VC6.0でソフトを開発中です。

デバッグモードでソフト終了時に、
例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation。
というよく見かけるエラーが出たので、例外が起きた場所で停止して原因を特定しようとしたのですが、
混合モードで

 678ED25F movaps xmm0,xmmword ptr [esi]
 678ED262 movaps xmm1,xmmword ptr [esi+10h]
 678ED266 lea esi,[esi+20h]

と、ソースコードのないところしか出てきません。
これはどういった意味なのでしょうか?
ここから先、原因を特定するにはどのようにすればよいでしょうか?

MFCプログラムの開発は多少経験がありますが、あまり詳しくありません。
よろしくお願いいたします。

A 回答 (1件)

サポートも終わっているVC6ってのも厳しいところですが……



>例外処理 (初回) は ABC.exe (TEMP.DLL) にあります: 0xC0000005: Access Violation。
>というよく見かけるエラーが出たので、例外が起きた場所で停止して原因を特定しようとしたのですが、

Access Violationでは、発生したところと原因の位置が違い過ぎます。
ので、その方法ではチェックできません。
# たとえば…ポインタに不正な値を入れていた(原因)としても、それがAccess Violationとして表面化する(エラー発生)のはそのポインタの内容を参照した時です。

>と、ソースコードのないところしか出てきません。
>これはどういった意味なのでしょうか?

API内部だったり、ライブラリの中だったりするとソースは出てこないでしょう。

>ここから先、原因を特定するにはどのようにすればよいでしょうか?

ポインタ関係で変な操作しているところがないか…とか、そういう探し方でしょうかねぇ……。
あちこちにTRACE()入れて、どこまで進んでいるか…って調べるのもありかも知れません。

>デバッグモードでソフト終了時に、

動的確保して、オーバーランやアンダーランしたとか、解放し忘れたとか、そういうところとかありませんか?
プログラム終了時の後始末関係でエラーになったのではないかと推測されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>Access Violationでは、発生したところと原因の位置が違い過ぎます。
>ので、その方法ではチェックできません。

そうなんですね・・・具体的な例を示して頂き助かります。
やはりポインタ操作でミスというのが一番濃厚でしょうか。
動的確保に関する処理をもう一度洗い直してみます。

最後になりましたが、お礼が遅くなってしまい申し訳ございませんでした。
ご丁寧にありがとうございました。

お礼日時:2014/04/28 21:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!