2011-06-12 31 views
3

任何人都可以推荐一个高质量的C++内存调试API或Windows软件(特别是与MinGW一起工作的)吗?我几乎肯定了我的程序中有内存泄漏,但我不知道从哪里开始寻找。C++内存调试器?

另外,在一个相关的说明中,我以前尝试重载全局的new和delete操作符,并从那里存储调试信息。然而,当我尝试用我的重载操作符替换每一个新的事件时,它会抛出一堆错误。我只尝试使用一个简单的预处理宏来做到这一点。

#define new new(__FILE__, __LINE__) 

围绕这个问题有没有独特的解决方法?

编辑:我可能应该更清楚这一点。事实上我确实声明了一个重载,并且没有任何错误地实现它。唯一的问题是,当我尝试使用宏替换所有使用新运算符来使用我的重载时,这就是为什么我只发布宏代码。

+1

当然你的宏会引发错误。 [操作员新](http://www.cplusplus.com/reference/std/new/operator%20new/)没有重载,它接受这些参数。定义一个宏不只是为你创建一个适用的函数。 – 2011-06-12 01:20:28

+0

我不想听起来居高临下,但宏开辟了一个愚蠢的错误的方式:是你的'新'定义*之前*宏出现?为什么不完全忽略它,并定义全局'new'(没有参数的那个),进行日志记录并从例如'operator new'? – 2011-06-12 01:21:31

+0

@Luc,不。我确保在宏之前添加我的超载声明。尽管如此,我可能会尝试将正常的全球超载。 – B3tturTh3nU 2011-06-12 01:28:09

回答

3

对于Windows中的内存泄漏,我发现启用了usermode堆栈跟踪的UMDH非常有用。 Here's a tutorial

有关其他工具的列表,请看here

+0

这似乎是我正在寻找,谢谢。希望它能帮助我发现泄漏的来源。 – B3tturTh3nU 2011-06-12 01:50:19