2

Visual Studio 2010でイベント(、、)を使用して同期された2つのスレッドを実行するプログラムを作成しました。次のようになりSetEvent()ます。WaitForSingleObject()WaitForMultipleObjects()

  • デバッガーを使用してこのプログラムを実行すると、一定時間実行されてからクラッシュします

  • デバッグせずにこのプログラム(.exeファイル)を実行すると、直接クラッシュします

  • デバッガーを使用して別のコンピューターでこのプログラムを実行すると、すぐにクラッシュし、.exeファイルを介してしばらくするとクラッシュします

デバッグ時に次のエラーが報告されています。

Unhandled exception at 0x5eafcaf7 (msvcr100d.dll) in test.exe: 0xC0000005: Access violation reading location 0x0036f000.

どこから検索を開始すればよいかわからないので、誰かがこのトピックに光を当てることができますか?デバッガーでコードを実行する場合と実行しない場合の違いはどれですか?(どの種類のコードが追加されますか?)同じコードを実行すると、異なるコンピューターの動作が異なるのはなぜですか?

両方のコンピューターにまったく同じオペレーティングシステム(Windows 7)があり、同じライブラリとパッチを想定しています。

ご協力ありがとうございました!


2012年12月11日編集

Application Verifierをインストールしましたが、VisualStudioで次のようなエラーが表示されます。

=========================================================== 
VERIFIER STOP 0000000000000013: pid 0x1E18: first chance access violation for
current stack trace

000000000874F000 : Invalid address being accessed
000000005201CAF7 : Code performing invalid access
000000000009E440 : Exception record. Use .exr to display it.
000000000009DF50 : Context record. Use .cxr to display it.
===========================================================

どのアドレスがどのコード行に属しているかを確認して、例外が発生した場所を正確に知る方法を誰かが知っていますか?また、プログラムのヘルプで、コマンド「!heap p -a ACCESS_ADDRESS」を使用すると、エラーの性質とどのヒープブロックがオーバーランするかについての詳細が表示されることを読みました。Visual Studioを使用してこのコマンドをどこに配置する必要がありますか?

4

1 に答える 1

1

マルチスレッド環境で作業する場合、さまざまなスレッドでさまざまな速度で処理が行われる可能性があります。関連するコードなしで考えられる原因を特定しようとするのは非常に困難です。

エラーは、一般的なメモリ アクセス違反エラーです。これは通常、関数から返される変数が予想よりも大きいか、型が異なる場合に発生します。

コードを見ていただけますか?

于 2012-12-07T15:12:03.247 に答える