1

ここで説明したデバッグを使用し始めると、非常に厄介なリンカ エラーが発生しました。

new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )コンストラクトに絞り込むことができました。この新しい演算子のオーバーロードが使用されるとすぐに、私は取得しますerror LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPEAXHPEBDH@Z) already defined in ...

そのオブジェクト ファイルをリンク プロセスから除外すると、別のファイルが表示されるだけです。私はこれを確認していませんが、MFC と競合するこれらのオブジェクト ファイルはすべて、デバッグ用の新しいバージョンのオペレーターを使用していると確信しています。

このエラーを Google で検索すると、CRT と MFC を間違った順序で混在させていることがすべての証拠からわかります。

私はすべてのオブジェクトファイルとライブラリをdumpbin /directives調べて、リンクの順序が正しいことを確認しましたが、これらすべてにもかかわらず、そのエラーを乗り越えたことはありません.

CRT のデバッグ手法は本質的に MFC と互換性がないのでしょうか、それとも説明がありますか?

私は MFC についてあまり知識がなく、MFC から完全に離れようとしていますが、それが起こるまでこれを機能させたいと思っています。

4

1 に答える 1

1

MFC アプリケーションは、デバッグ モードのときにメモリ リークを検出します。リークに関する詳細情報を取得するには、次のように、各ファイルの先頭で DEBUG_NEW に new を定義できます。

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

詳細については、MSDN の記事「MFC でのメモリ リーク検出」を参照してください。

于 2012-09-04T05:13:16.877 に答える