解決済みの質問
質問:No.440035
困ってます
お気に入り投稿に追加する (0人が追加しました)
回答数1
閲覧数887
自作アプリでアクセス違反が発生して困っています
プログラムをDelphiで作成しているのですが、実行中に「致命的なエラー」で終了することが多くなりました。
そこで、エラーログを開いてみると、

アプリケーション例外が発生しました:
例外番号: c0000005 (アクセス違反)

と言われています。思い当たる節は、単に存在しないアドレスにアクセスをしたとかそういうレベルだとは思うのですが、どうしても場所が特定できません。
(デバッガを積んでいない他人の環境でだけ発生するのです)

スタックバックトレースを参照すると、以下のようなものがありました。
ntdll!ZwYieldExecution
kernel32!ProcessIdToSessionId
ntdll!NtWaitForMultipleObjects
kernel32!WaitForMultipleObjects
kernel32!lstrcmpiW
ntdll!NtReplyWaitReceivePortEx
rpcrt4!NdrConformantArrayMemorySize
winmm!DriverCallback
winmm!waveOutSetVolume

ちなみに、MMTimerを使い数値を演算して、ApplicationIdleを見つけて描画を行っている普通の(?)シミュレーションプログラムです。(サウンドとシリアルからの入力も使っています)
詳しくはないのですが、この近辺でコケているということなのでしょうか・・・。
投稿日時 - 2003-01-08 09:54:51
質問者が選んだベストアンサー
回答:No.1
例外の発生が多く頻繁にとまるのであればデバッグは比較的楽だと思います。これがずっと使っていて1日に1回程度のように少ないと難しいですが...

まずは例外が発生していそうな関数をTRYで例外トラップします。そして例外がトラップできたらテキストファイルにその場所を出力するルーチンを作り、どこら辺で例外が発生しているのかを確かめるという方法です。例外がトラップできない場合には例外がでなくてもテキストファイルに書き込むようにしておくと場所が特定できます。特定できればあとは変数名やアドレスも併せて出力するようにすれば原因もわかるのではないでしょうか?
投稿日時 - 2003-01-08 12:55:26
この回答を支持する
(現在0人が支持しています)
お礼
ありがとうございます。
今日わかったのですが、Win2000では発生せず、Meだと必ず発生するんです。ということは、メモリ内容を破壊している可能性があり、普通の例外捕捉ルーチンではダメそうです。
あとは、どこで誤動作しているか、逐一書き出しながら実行するしかないでしょうか・・・。
でもこの場合、ファイルを閉じる前に墜落されると末尾がおかしくなりそうですね...(汗
投稿日時 - 2003-01-11 00:24:51
この質問は役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
もっと聞いてみる
関連するQ&Aはこちら
Intel SSD Toolboxというソフトを起動しようとしたら 「アプリケーションを正しく起動できませんでした(0xc0000005)」 というエラーが出て起動できません。 イベントビューアを見る...
ある音楽ソフト(FL Studio)を立ち上げるときに、次のようなエラーが出ました。そのエラーを直したいので相談させてください。 エラー内容 FL.exe-エントリポイントが見つかりません。 プロ...
WINMM.dllと出てしまいます。 Windows Vista Home Premium with Service Pack 1 です。 昨日、「WINMM.dllが見つからないため、このアプリケ...
この他の関連するQ&Aをキーワードで探す
Windowsのサブカテゴリ
カテゴリ:Windows NT・2000
RSS
-PR-
PR
-PR-