C ++内存泄漏检测方法

时间:2010-04-19 10:01:18

标签: c++ windows memory-leaks stack-trace

我正在开发一个在Windows上使用许多外部库的项目。 我遇到内存泄漏问题:我通过覆盖operator new / new []和delete / delete []来检测到许多内存泄漏。问题是我知道泄漏了多少内存块,但是不知道在哪里找到它们,在覆盖的函数中,我可以记录分配的mem块的大小和位置,而不需要堆栈跟踪。

所以要处理它,我想我也需要记录堆栈跟踪(但是如何?),还是有什么方法可以找到导致内存泄漏的代码?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我使用以下方法为new提供有关分配每个内存块的文件和行的信息:

void operator delete(void *p, const char* filename, int line);
void operator delete(void *p, const char* filename, int line, const std::nothrow_t&);
void operator delete[](void *p, const char* filename, int line);
void operator delete[](void *p, const char* filename, int line, const std::nothrow_t&);

void *operator new(std::size_t n, const char* filename, int line);
void *operator new(std::size_t n, const std::nothrow_t&, const char* filename, int line);
void *operator new[](std::size_t n, const char* filename, int line);
void *operator new[](std::size_t n, const std::nothrow_t&, const char* filename, int line);

#define new foo_new
#define foo_new new(__FILE__, __LINE__)

答案 1 :(得分:0)

还有一些COTS可以为您显示内存泄漏,例如Rational Purify(http://www-01.ibm.com/software/awdtools/purify/win/)。我提到的是我们在最后一个位置使用它。

我想也有免费的。请提及是否有。