0

コンソール アプリケーション (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 コードにいくつかのバグがあることは理解していますが、質問はそれを見つけることができるかどうかです。

4

2 に答える 2

1

リリース ビルドでは、メモリの処理がデバッグ ビルドとは大きく異なります。このエラーは通常、既に削除されたオブジェクトにアクセスしようとしたときに発生します。シンボルをロードしない場合、コールスタックはがらくたです。

于 2011-08-12T14:57:23.273 に答える
0

最後に私はそれを咳をしました!それはいくつかのバグであり、それらはすべて - 配列操作でインデックスが範囲外でした。

助けてくれてありがとう!

于 2011-08-17T09:32:06.650 に答える