0

最初の ca で問題なく動作するマルチスレッド サーバー アプリケーションがあります。40 秒 (この間、アプリケーションは着信パケットを待っているだけです)。この 40 秒後、何も変更されていない、クライアントが接続されていない、データが送信されていないなどのにもかかわらず、突然クラッシュします。

Windows から受け取ったクラッシュ レポートは次のとおりです。

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: myapplicationname.exe
  Application Version:  0.0.0.0
  Application Timestamp:    508d2a0b
  Fault Module Name:    StackHash_58df
  Fault Module Version: 6.1.7600.16385
  Fault Module Timestamp:   4a5bdb3b
  Exception Code:   c0000374
  Exception Offset: 000cdcbb
  OS Version:   6.1.7600.2.0.0.256.48
  Locale ID:    1031
  Additional Information 1: 58df
  Additional Information 2: 58df710f17985997dec7b600103e4fd6
  Additional Information 3: bc2b
  Additional Information 4: bc2b581ed6e84cb4442c19134e8081d3

バッファ オーバーフローやメモリ リークの可能性をチェックしましたが、そうではありませんでした (少なくとも私は何も気づきませんでした)。

それとは別に、私をさらに混乱させたのは、コンパイルしてVisual Studio(ローカルWindowsデバッガー)で実行すると、このエラーは発生せず、クラッシュもせず、すべてが想定どおりに機能することです。このような問題が発生したことがないため、これを修正するためにどこから始めればよいかわかりません。

コードがないと何かを診断するのは難しいことはわかっていますが、コードが多すぎて、このエラーが何を意味し、何に関連しているのかわからないため、制限することはできません。誰かが似たようなことに遭遇したか、このエラーの意味を知っていることを願っています。これまでのところ、他のプログラムの同様の問題を修正する方法しか見つかりませんでした (アプリケーションを再インストールすることが答えでした)。

ワイルドな推測: コード全体を実装するところまで到達していないため、スレッドの 1 つに多くのストレスを与えているポーリング ループがあります。CPU の 1 つを保護するために、DEP が呼び出されてアプリケーションが停止する可能性はありますか? - 睡眠を追加しましたが、何も変わりませんでした.

4

1 に答える 1

1

例外コード: c0000374

これらの例外コードは、ntstatus.h SDK ヘッダー ファイルに記載されています。

//
// MessageId: STATUS_HEAP_CORRUPTION
//
// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION           ((NTSTATUS)0xC0000374L)

もちろん、ヒープの破損は非常に一般的な C++ プログラミングの危険です。バグが見つからない場合は、crtdbg.h で使用可能なデバッグ アロケータを使用してください。

于 2012-10-28T14:24:05.367 に答える