c++ - 内存泄漏检测和覆盖新功能?

标签 c++ memory-leaks unmanaged

我正尝试在这两篇文章的帮助下进行内存泄漏检测: http://msdn.microsoft.com/en-us/library/e5ewb1h3%28VS.80%29.aspx http://support.microsoft.com/kb/q140858/

所以在我的 stdafx.h 中我现在有:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)

唯一的问题是,我有一个覆盖新函数的类:

class Dummy
{    
  //overloaded new operator
  void FAR* operator new(size_t cb);
}

现在,当我编译这段代码时,我得到: 错误 C2059:语法错误:“常量” error C2091: 函数返回函数

知道如何解决这个问题吗?

最佳答案

当取消重载定义时,您可以使用 pragma 指令来保存和恢复新宏。请参阅 [MSDN]( http://msdn.microsoft.com/en-us/library/hsttss76(VS.71).aspx) 了解确切的语法。

例如

#pragma push_macro("new")
#undef new
void FAR* operator new(size_t cb);
#pragma pop_macro("new") 

您可以将这些放在标题中,例如

begin_new_override.h:

#ifdef new
#define NEW_WAS_DEFINED
#pragma push_macro("new")
#undef new
#endif

end_new_override.h:

#ifdef NEW_WAS_DEFINED
#undef NEW_WAS_DEFINED
#pragma pop_macro("new")
#endif

然后

#include "begin_new_override.h"
void FAR* operator new(size_t cb);
#include "end_new_override.h"

关于c++ - 内存泄漏检测和覆盖新功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128458/

相关文章:

c++ - 在知道墙壁在哪里的同时计算房间

c++ - 运行时错误 : Access violation writing loacation while deleting a pointer in dynamic memory allocation

c++ - 模板中 C++ 中的内存泄漏

exception - 防止第三方 dll 使 PowerShell 崩溃

c++ - 如何在 Visual Studio 2010 中创建非托管 C++ 项目?

c++ - 在 Makefile 中以编程方式确定库路径

c++ - 为什么重写的方法会隐藏所有具有相同名称的方法,无论其参数如何

c++ - 使用无符号数进行图像边界检查

java - 整个应用程序中的一个插页式广告

c# - 在传递给非托管代码之前固定一个可更新的结构?