错误C2661:'CObject :: operator new':没有重载函数需要4个参数

时间:2012-06-08 16:33:07

标签: c++ memory-leaks mfc compiler-errors memory-leak-detector

我有一个内存泄漏,我正试图在我的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

这种技术在大多数文件中运行良好,但是当我将它包含在某些文件中时,我得到错误:错误C2661:'CObject :: operator new':没有重载函数需要4个参数

这里有什么解决方案?我应该在某个地方或某个地方#unfing ing new?

谢谢!

2 个答案:

答案 0 :(得分:1)

我还使用与您相同的功能进行泄漏检测。

您可以注释掉或删除DEBUG_NEW定义块,假设您不再需要它来捕获内存泄漏。或者,如果您仍然需要它,请保持原样并使用

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

因此,您在创建对象之前取消定义new(请参阅错误列表中的行号)并在之后立即重新定义它,以便在创建此对象后发生的任何内存泄漏仍然可以识别。

答案 1 :(得分:1)

我在.cpp文件中将#define new DEBUG_NEW语句放在#include ...之前导致了类似的问题。更改订单解决了我的问题。