Я хочу найти утечки памяти в моем приложении, используя стандартные утилиты.
Ранее я использовал свой собственный распределитель памяти, но другие люди (да, вы 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, но не вижу утечки памяти.
Вопросы:
- Почему Application Verifier не сообщает об утечке?
- Или Application Verifier действительно не предназначен для обнаружения утечек?
- Если нет других доступных инструментов, позволяющих четко сообщать об утечках в конце приложения (т.е. не делать регулярные снимки и сравнивать их, поскольку это невозможно в приложении, занимающем 1 ГБ или более), включая вызов стек места размещения (поэтому не простое сообщение об утечке в конце CRT)
Если я не найду достойную утилиту, мне все равно придется полагаться на свой собственный менеджер памяти (который делает это отлично).