ここ、MSDN、およびGoogleを介して他のフォーラムで検索を行い、これに対する何らかの解決策を見つけようとしましたが、これまでのところ行き詰まっています.
C++ プログラムのアクセス違反エラーを突き止めようと、1 週間探していました。一部の IP 制限の下にあるため、ここにコードを投稿することはできませんが、基本的には、TCP 接続からバイトを読み取り、std::queue の後ろに配置する約 100 ミリ秒ごとに実行されるループです。
特定のバイト シーケンスが通過したことに気付いた後、x バイトをキューから削除し、内部プロトコルで定義されたメッセージとして処理します。
アプリケーション内のどこかで、キューが破損し、アプリケーションがクラッシュします。したがって、それがアクセス違反であるという事実と組み合わせると、どこかの危険なポインターである必要があります。
VS2005 Debugger と Windbg を使用してそれを見つけようとしましたが、コール スタックを調べましたが、あまり役に立ちませんでした。私が解決できるのは、原因が内部キューの破損であるということだけです。クラッシュする理由は、メッセージのヘッダーが送信されて解析されるためですが、ヘッダーが破損しているため、すべてが失敗します。
次に、Intel Thread Checker を試してみましたが、プログラムが同期マルチスレッド システムの一部であるため、このアプリケーションで使用するには遅すぎます。
300回の読み取りで実行されることもあれば、5000回の読み取りが実行されることもあり、クラッシュする前に10000回の読み取りが実行されることもあります。
他にどのような診断方法を試すことができますか? ここで、すでにチェックしておくべき単純なものがありませんか?私が見る限り、新しく作成されたものはすべて一致する削除があり、共有ポインターと長寿命オブジェクトの自動ポインターにブースト ライブラリを使用しています。