2012-06-08 51 views
3

我有一个内存泄漏,我试图在我的mfc程序中搜索。通常,我会做一些这样的:错误C2661:'CObject :: operator new':没有重载的函数需要4个参数

头文件

// 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个参数

这里的解决方案是什么?我应该在#什么地方找到新东西吗?

谢谢!

+0

迂回地说'#define new DEBUG_NEW'调用未定义的行为(如果我正确记得)。 – Nawaz

+0

@Nawaz:它似乎对其他类很好。检测内存泄漏实际发生的正确方法是什么?这似乎是“微软推荐的解决方案”。大多数探查者用我的代码做一些有趣的事情。 – Jordan

+0

正确的做法是为您的班级或全局替换新的和删除的操作符。 –

回答

1

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

要么你可以注释掉或删除DEBUG_NEW定义块,假设你不再需要它来捕获内存泄漏。或者,如果你仍然需要它,离开它,因为它是和使用

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

所以,你取消定义新刚对象创建之前(看到你的错误列表行号)后立即再次重新定义它,因此任何在创建对象后发生的内存泄漏仍然可以识别。

1

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

相关问题