典型的なアクセス違反が発生しました:
access violation at 0x4ebb7456: read of address 0x4ebb7456
これは、プログラムの残りの部分がすでにシャットダウンしているときに作成されるスレッドで発生します。
System.FinalizeUnits
例外発生時にメインスレッドが実行されています。
gdiplus.dll
ロードされたメモリ領域にアドレスが属していることがわかりました。
返されたハンドルLoadLibrary('gdiplus.dll')
を呼び出さずにdprファイルに呼び出しを追加すると、問題は解決します。これにより、ファイナライズセクションの実行中にがアンロードされなくなります。FreeLibrary
gdiplus.dll
プログラムのどの部分がアクセス違反につながるスレッドを作成しているのかを知るにはどうすればよいですか?
解放されたメモリスペースを呼び出すコードを識別する方法はありますか?
FastMMとmadExceptはほとんど役に立ちません。madExceptエラーレポートウィンドウが表示されますが、すぐに再び閉じられ、ログファイルは書き込まれません。
プログラムを分解することはできますが、それは簡単なアプリケーションではなく、ある種のデバッグ手法を使用してこれを解決したいと思います。