※ ChatGPTを利用し、要約された質問です(原文:自作アプリでアクセス違反が発生して困っています)
自作アプリでアクセス違反が発生して困っています
このQ&Aのポイント
Delphiで作成した自作アプリが実行中に致命的なエラーで終了することが多くなりました。
エラーログにはアプリケーション例外が発生し、例外番号c0000005(アクセス違反)というメッセージが表示されました。
問題の特定は難しく、他人の環境でのみ発生しています。プログラムはサウンドやシリアルの入力も含むシミュレーションプログラムで、MMTimerとApplicationIdleを使用しています。
プログラムをDelphiで作成しているのですが、実行中に「致命的なエラー」で終了することが多くなりました。
そこで、エラーログを開いてみると、
アプリケーション例外が発生しました:
例外番号: c0000005 (アクセス違反)
と言われています。思い当たる節は、単に存在しないアドレスにアクセスをしたとかそういうレベルだとは思うのですが、どうしても場所が特定できません。
(デバッガを積んでいない他人の環境でだけ発生するのです)
スタックバックトレースを参照すると、以下のようなものがありました。
ntdll!ZwYieldExecution
kernel32!ProcessIdToSessionId
ntdll!NtWaitForMultipleObjects
kernel32!WaitForMultipleObjects
kernel32!lstrcmpiW
ntdll!NtReplyWaitReceivePortEx
rpcrt4!NdrConformantArrayMemorySize
winmm!DriverCallback
winmm!waveOutSetVolume
ちなみに、MMTimerを使い数値を演算して、ApplicationIdleを見つけて描画を行っている普通の(?)シミュレーションプログラムです。(サウンドとシリアルからの入力も使っています)
詳しくはないのですが、この近辺でコケているということなのでしょうか・・・。
お礼
ありがとうございます。 今日わかったのですが、Win2000では発生せず、Meだと必ず発生するんです。ということは、メモリ内容を破壊している可能性があり、普通の例外捕捉ルーチンではダメそうです。 あとは、どこで誤動作しているか、逐一書き出しながら実行するしかないでしょうか・・・。 でもこの場合、ファイルを閉じる前に墜落されると末尾がおかしくなりそうですね...(汗