Download demo project - 7 Kb
Introduction
I would like share with you some experience in catching memory leaks.
In most case it is a long processe and required additional tools like PurifyNT or
BoundsChecker. Actually, catching simple memory leaks is possible by using the Microsoft
exported functionality.
In a simple case you should add several lines to 'StdAfx.h'
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC #define _INC_MALLOC #endif
Note: it should be before the 'include' directives.
In the enclosed example you will find an example with a memory leak. To see how it
works you should run program under the debugger. When the program finishes you will
see in the the 'Output' window, 'Debug' tab the following message.
Detected memory leaks!
Dumping objects -> D:\Projects\CrtDbg\CrtDbg.cpp(25) : {53} normal block at 0x002F26C0, 10 bytes long.
Data: <MemoryLeak> <MEMORYLEAK> 4D 65 6D 6F 72 79 4C 65 61 6B
Object dump complete.
In more advanced memory management cases you should look in the 'AfxMem.cpp' file
in MFC source directory. File contents plenty of memory management functions.
I have written a class CMemDiff that wraps CMemoryState
and helps track memory leaks. Just include the MemDiff files in your project.
A global variable of type CMemDiff is declared and it's constructor and
destructor will check the state of your memory at the start and end of your program
and report any leaks.