1. Use _CrtDumpMemoryLeaks() to check whether there is memory leak in program.


With the help of  _CRTDBG_MAP_ALLOC, it can output memory leak info with file line info for those memory block allocated by malloc(), while it would never print file line info for those allocated by new().


#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>


Call 

{

      _CrtDumpMemoryLeaks();

}

at the end of the program exit if there is only one exit in the program.


OR

Call

{

     _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

}

at the beginning of your program to ensure _CrtDumpMemoryLeaks() would be called when the program exits from any exit point.



2. Use DEBUG_NEW method to check in detail


#define DEBUG_NEW new(_NORMAL_BLOCK, THIS_FILE, __LINE__)


#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif


{

     _CrtMemDumpAllObjectsSince(NULL);

}




I still prefer to use shared_ptr to manage heap allocation instead of putting too much effort on detecting memory leak.


Keep on learning.