我想使用标准实用程序在我的应用程序中查找内存泄漏。以前我使用自己的内存分配器,但其他人(是的,你 AlienFluid)建议使用 Microsoft 的 Application Verifier,但我似乎无法让它报告我的泄漏。我有以下简单的应用程序:
#include <iostream>
#include <conio.h>
class X
{
public:
X::X() : m_value(123) {}
private:
int m_value;
};
void main()
{
X *p1 = 0;
X *p2 = 0;
X *p3 = 0;
p1 = new X();
p2 = new X();
p3 = new X();
delete p1;
delete p3;
}
该测试显然包含内存泄漏: p2 是新的但未删除。
我使用以下命令行构建可执行文件:
cl /c /EHsc /Zi /Od /MDd test.cpp
link /debug test.obj
我下载了 Application Verifier (4.0.0665) 并启用了所有检查。
如果我现在运行我的测试应用程序,我可以在 Application Verifier 中看到它的日志,但我看不到内存泄漏。
问题:
- 为什么应用程序验证程序不报告泄漏?
- 或者应用程序验证器不是真的打算找到泄漏吗?
- 如果不是哪些其他工具可用于在应用程序结束时清楚地报告泄漏(即不是通过定期拍摄快照并比较它们,因为这在占用 1GB 或更多的应用程序中是不可能的),包括分配位置(所以不是 CRT 末尾的简单泄漏报告)
如果我没有找到一个像样的实用程序,我仍然必须依靠我自己的内存管理器(它做得很好)。