【发布时间】:2012-06-12 17:48:56
【问题描述】:
我正在尝试在我的 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 个参数
这里有什么解决方案?我应该在某个地方#undef-ing 新事物吗?
谢谢!
【问题讨论】:
-
学究式地讲
#define new DEBUG_NEW调用未定义的行为(如果我没记错的话)。 -
@Nawaz:它似乎适用于其他类。检测内存泄漏实际发生位置的正确方法是什么?这似乎是“微软推荐的解决方案”。大多数分析器都用我的代码做一些有趣的事情。
-
正确的做法是为您的班级或全局替换 new 和 delete 运算符。
-
@Als:很多事情让我有点不知所措。在这种情况下我应该使用代码示例吗?我将在 mfc 应用程序中的何处实现自定义新处理程序?
标签: c++ memory-leaks mfc compiler-errors memory-leak-detector