Очередной способ борьбы с Memory Leak's. В Visual С есть встроенные функции для проверки Heap-a:
_CrtMemCheckpoint — запоминает текущее состояние Heap-a;
_CrtMemDifference — сравнивает два состояния памяти (полученные в результате двух вызовов _CrtMemCheckpoint) и возвращает разницу между ними
_CrtMemDumpStatistics — выдает содержимое разницы в состояниях памяти (которая получилась на выходе _CrtMemDifferencе) в читабельном виде.
Чтобы стало понятнее, пример юзания:
#include <crtdbg.h> //... _CrtMemState s1, s2, s3; //структуры для хранения состояния Heap-a _CrtMemCheckpoint( &s1 ); //запоминаем состояние Heap-a //здесь идет проверяемый код char *c = new char[10]; . . . //конец проверяемого кода _CrtMemCheckpoint( &s2 );//получаем новое состояние if ( _CrtMemDifference( &s3, &s1, &s2 ) ) _CrtMemDumpStatistics( &s3 );//попадаем сюда только если s1 и s2 различны
По дефолту статистика Dump-ится в окно Output, закладка Debug. Если нужно перенаправить Dump например в файл, смотри функции _CrtSetReportMode и _CrtSetReportFile. Кстати, в MFC есть класс CMemoryState, который фактически выполняет те же самые действия.
Да, все эти функции вызываются только если продефайнен _DEBUG. Более подробно смотри в MSDN, топик Visual C++ Programmer's Guide-> Run-Time Library Reference->Debug Function Reference.