0

Visual C++ デスクトップ アプリケーションを .NET Web アプリケーションに変換しています。そうすることで、元々デスクトップ アプリケーションで使用されていたバックエンドの Visual C++ dll を保持しようとしました。これらの dll からグローバル変数を削除しようとして、bad_alloc 例外の問題に遭遇しました。この例外はランダムに発生するようで、多くの試行/キャッチを使用して下位レベルのコードで特定しようとしています。私は次のことを試しましたが、あまり運がありませんでした:

1) Debug->Exceptions から C++ Exceptions を有効にしました。(例外はキャッチされますが、コール スタックは、問題の原因となった変数や関数を特定するのに役立ちません)。2) DebugDiag で VS デバッガ Web サーバー プロセスのメモリ リーク ルールを作成しようとしました。(漏れはありませんでした)。

これを追跡するための他の戦略は非常に役立ちます!

4

1 に答える 1

0

通常、C++ 演算子 new() は C の malloc() 関数を呼び出します。演算子 new は、malloc() が 0 を返す場合に bad_alloc をスローします。malloc() は、メモリ不足またはヒープの破損のために 0 を返すことがあります。

于 2013-01-03T23:05:14.140 に答える