コンソール アプリケーション (MS VS2010 SP1 を使用して記述) があります。MFC も ATL も標準ライブラリもありません。デバッグ ビルドでは、すべて正常に動作します。しかし、リリース ビルドにはアクセス違反があります。
MS VS (リリース モードでも) からアプリを実行すると、すべて正常に動作し、何が起こっているのかわかりません。ジャストインタイム デバッグを使用しようとしましたが、コール スタックを受け取りました。
ntdll.dll!77b020cb()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
Mapp.exe!_unlock(int locknum=72090689) Line 375 C
04320069()
アプリがシャットダウンし、オブジェクトの破壊が進行しているときに発生しました。例外を引き起こす「delete ptr」のような行があります。しかし、そのコードを何度かチェックしましたが、何も見つかりませんでした。CRT デバッグ機能 (メモリ リーク診断、カスタム メモリ割り当てフックなど) を使用しようとしましたが、結果はありません。また、CRT のデバッグ バージョンを使用すると問題が解決することもわかりました (リリース構成でマルチスレッド デバッグ (/MTd) を使用します)。もう 1 つ: コードにマイナーな変更を加えると (デバッグ コードの行を書くなど)、コール スタックが変化し、そのたびにまったく異なります。例えば:
ntdll.dll!77b0206e()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
Mapp.exe!_unlock_fhandle(int fh=72090689) Line 491 C
04320069()
そしてもう一つ
ntdll.dll!77b0206e()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77b0201f()
kernel32.dll!768cf1cc()
Mapp.exe!free(void * pBlock=0x024950f0) Line 51 C
Mapp.exe!CGISMapLineShape::~CGISMapLineShape() Line 20 + 0x13 bytes C++
Mapp.exe!CGISMapPolygonShape::`scalar deleting destructor'() + 0x13 bytes C++
Mapp.exe!CGISMapMultyPolygonShape::~CGISMapMultyPolygonShape() Line 9 C++
Mapp.exe!CGISMapMultyPolygonShape::`scalar deleting destructor'() + 0xc bytes C++
Mapp.exe!CGISMapShapeCollection::Clear() Line 307 C++
fpplication コードにいくつかのバグがあることは理解していますが、質問はそれを見つけることができるかどうかです。