编程时的内存泄漏问题是我这种菜鸟经常犯的错误,一个一个的找new和malloc看是否delete和free的方法太笨,找到如下一种很方便的方法。
首先在程序的开始加入头文件和宏
- #define _CRTDBG_MAP_ALLOC
- #include <stdlib.h>
- #include <crtdbg.h>
然后在程序的入口处(main函数开始)加入如下代码
- // 在入口函数一开始添加以下代码
- _CrtDumpMemoryLeaks();
- //_CrtSetBreakAlloc(54);
- _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
然后启动调试,注意不是开始运行(不调试),程序运行完后会在输出窗口有类似如下的输出
检测到了内存泄漏,这时记录下{}中的数字,写入_CrtSetBreakAlloc()的参数中,取消_CrtSetBreakAlloc()前的注释符号,在_CrtDumpMemoryLeaks(); 和_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );前添加注释符号
再启动调试,会发现如下错误:
点中断,然后找到调用堆栈的窗口
就能定位到申请动态内存的地方,然后在合适的位置释放开辟的动态内存,内存泄漏排除了,程序更加牢固了。
转载于:https://blog.51cto.com/buptdtt/556423