Click here to Skip to main content
Click here to Skip to main content

Tagged as

Setting memory allocation break point in watch window

, 5 Feb 2012 CPOL
Rate this:
Please Sign up or sign in to vote.
Memory leak detection in VC++
This tip helps to utilize the contex operator :
{,,msvcrxxd.dll}_crtBreakAlloc
Memory leaks in VC++ can be detected using debug heap function. To enable these, we should use:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
// Note that in the above code, the order of #include statements must not change
And to track memory (leaks) allocated via 'new', we can use:
#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
Now at the end of main() or at the point of interest in the code, we should call _CrtDumpMemoryLeaks();
void main()
{
   // ....
  _CrtDumpMemoryLeaks();
}
The leaks, if any, are shown in the Output window as:
C:\Projects\Sample\main.cpp(10) : {30} normal block at 0x00780E80, 64 bytes long.
 Data: <> CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
 
We can utilize the memory allocation number (30 in the above example) to identify the code which caused the leak. To do this, we can use _crtBreakAlloc or the context operator in the watch window:
{,,msvcrxxd.dll}_crtBreakAlloc
Here xx should be replaced by the version of Visual Studio.
90 for VS2008
80 for VS2005 ...
In the watch window, the value of this wil be -1 initially and we can then set it to our memory allocation number to break at the appropiate code block.
 
To consolidate, all we have to do is this:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

void main()
{
   int* i = new int;
   // .....
   // the memory allocated with pointer i is not released and will be shown as leak
  _CrtDumpMemoryLeaks();
}
 
Hope now it is usable in the real world.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Lakamraju Raghuram
Software Developer
India India
_____________________________________________________________
 
Did my masters from IIT-M in Advanced Manufacturing Technology and working mainly on C++ in CAD domain from 2004 onwards.

Comments and Discussions

 
GeneralOh... you see lot of noise? I do not see that way. All you h... PinmemberLakamraju Raghuram27-Jan-12 2:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.141223.1 | Last Updated 5 Feb 2012
Article Copyright 2012 by Lakamraju Raghuram
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid