You might need these defines after your includes
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
You might need these defines after your includes
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
That's an old version of Visual Leak Detector.
Try this: http://vld.codeplex.com/
Check out the piece of code.
Overloading operator new and operator delete to log all memory allocations and deallocations
I identified my memory leaks using this method.
When you define _DEBUG and include <crtdbg.h>
you get an overloaded operator new
which takes additional parameters which you can use to specify the file and line numbers in placement new
expressions.
E.g.
int* p = new (_NORMAL_BLOCK, __FILE__, __LINE__) int(5);
You can wrap this in a conditionally defined macro, e.g.
#ifdef _DEBUG
#define DEBUG_NEW_PLACEMENT (_NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NEW_PLACEMENT
#endif
int* p = new DEBUG_NEW_PLACEMENT int(5);
While you do see people defining a macro new
to completely hide this form client code, I do not personally recommend it as it breaks anything already intentionally using placement new and you have to make sure that any headers using placement new (such as many standard headers) are included before any header redefining new
. This can make it easy to let some inline uses of new
in header files slip through without being 'adjusted'.