3

mfc プログラムで追跡しようとしているメモリ リークがあります。通常、私は次のようなことをします:

ヘッダファイル

// Leak Detection
#if defined(WIN32) && defined(_DEBUG)
     #define _CRTDBG_MAP_ALLOC
     #include <stdlib.h>
     #include <crtdbg.h>
#endif

cpp ファイル

// Leak detection
#if defined(WIN32) && defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
    #ifdef DEBUG_NEW 
        #undef DEBUG_NEW
    #endif
    #define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__ )
    #define new DEBUG_NEW
#endif

この手法はほとんどのファイルでうまく機能しますが、ドキュメントなどの一部のファイルに含めると、次のエラーが表示されます: error C2661: 'CObject::operator new' : no overloaded function takes 4 arguments

ここでの解決策は何ですか?どこかで #undef-ing new する必要がありますか?

ありがとう!

4

2 に答える 2

1

また、リーク検出の目的で、あなたと同じ機能を使用しています。

DEBUG_NEW 定義ブロックは、メモリ リークをトラップする必要がなくなったと仮定して、コメント アウトするか削除することができます。または、まだ必要な場合は、そのままにして使用してください

#ifdef _DEBUG
#undef new
    CMyOject* pMyObjectInst = new CMyObject();
#define new DBG_NEW
#endif  

そのため、オブジェクト作成の直前に new を定義解除し (エラー リストの行番号を参照)、直後に再定義して、このオブジェクト作成後に発生するメモリ リークを引き続き識別できるようにします。

于 2012-10-16T12:15:14.830 に答える