私のプログラムにはかなり深刻なバグがあります - new() を時々呼び出すと、bad_alloc がスローされます。
bad_alloc で見つけることができるドキュメントから、次の理由でスローされるようです。
コンピューターのメモリが不足すると (これは確実に発生していません。4GB の RAM があり、5MB 未満 (タスクマネージャーでチェック済み) を使用している場合、プログラムは bad_alloc をスローし、バックグラウンドで何も実行されていません)。
メモリが断片化しすぎて新しいブロックを割り当てられなくなった場合 (これもありそうにありません。これまでに割り当てた最大サイズのブロックは約 1KB であり、クラッシュが発生する前に 100 回以上実行されることはありません)。
これらの説明に基づいて、実際には bad_alloc がスローされる可能性のある場所はどこにもありません。
ただし、実行中のアプリケーションは複数のスレッドを実行しているため、問題の原因となっている可能性があります。すべてのオブジェクトを 1 つのスレッドでテストすると、すべてがスムーズに機能しているように見えます。ここで起こっていると私が考えることができる唯一の他のことは、同時に複数の場所で new() を呼び出すことによって引き起こされるある種の競合状態である可能性がありますが、その動作を防ぐためにミューテックスを追加しようとしました無効。
プログラムは数百行あり、問題が実際にどこにあるのかわからないため、投稿するコードスニペットがあるとしても、どのコードスニペットを投稿すればよいかわかりません。代わりに、この種のことをテストするのに役立つツールがあるかどうか、またはこの問題を解決するのに役立つ一般的な戦略があるかどうか疑問に思っていました.
私は Microsoft Visual Studio 2008 を使用しており、スレッド化には Poco を使用しています。