编程时的内存泄漏问题是我这种菜鸟经常犯的错误,一个一个的找new和malloc看是否delete和free的方法太笨,找到如下一种很方便的方法。

首先在程序的开始加入头文件和宏

 
  
  1. #define _CRTDBG_MAP_ALLOC     
  2. #include <stdlib.h>     
  3. #include <crtdbg.h> 

然后在程序的入口处(main函数开始)加入如下代码

 
  
  1. // 在入口函数一开始添加以下代码     
  2.     _CrtDumpMemoryLeaks();        
  3.     //_CrtSetBreakAlloc(54);    
  4.     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );  

然后启动调试,注意不是开始运行(不调试),程序运行完后会在输出窗口有类似如下的输出

 

 检测到了内存泄漏,这时记录下{}中的数字,写入_CrtSetBreakAlloc()的参数中,取消_CrtSetBreakAlloc()前的注释符号,在_CrtDumpMemoryLeaks(); 和_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );前添加注释符号

再启动调试,会发现如下错误:

 点中断,然后找到调用堆栈的窗口

 就能定位到申请动态内存的地方,然后在合适的位置释放开辟的动态内存,内存泄漏排除了,程序更加牢固了。