我正在开发一个在Windows上使用许多外部库的项目。 我遇到内存泄漏问题:我通过覆盖operator new / new []和delete / delete []来检测到许多内存泄漏。问题是我知道泄漏了多少内存块,但是不知道在哪里找到它们,在覆盖的函数中,我可以记录分配的mem块的大小和位置,而不需要堆栈跟踪。
所以要处理它,我想我也需要记录堆栈跟踪(但是如何?),还是有什么方法可以找到导致内存泄漏的代码?
非常感谢您的帮助。
答案 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/)。我提到的是我们在最后一个位置使用它。
我想也有免费的。请提及是否有。