msvc内存泄漏检测MSVC 调试库内建了内存泄漏检查工具,默认情况下没有开启,可以通过如下步骤开始
在代码的开头添加以下三行代码# define _ crtd GB _ map _ alloc # includecstdlib # includecrtdbg.h以重新定义new运算符
# ifdef _ debug # ifndef _ dgb _ new # defined GB _ new new (_ normal _ block,__FILE__,__LINE__ ) ) dded
_ crtsetdbgflag (Cr tdbg _ alloc _ mem _ df|_ Cr tdbg _ leak _ check _ df );测试用例
//Project1.cpp :此文件包含“主”函数。 程序的执行在此开始并结束。 //#includeiostream//msvc调试头文件# define _ crtd GB _ map _ alloc # includecstdlib # includecrtdbg.h/h /重定义new运算__FILE__,__LINE__ ) #definenewdgb_new ) #endif//_dgb_new ) ) ) efinedgb )。 } void do something (simple * out param ) { outParam=new Simple ); }受保护的: int * mint ptr; (; intmain(intargc,char** argv ) /内存检查_ crtsetdbgflag (Cr tdbg _ alloc _ mem _ df|_ Cr tdbg _ leak _ check au auto ) 简单ptr-do something (简单ptr ); STD : cout ' hello world ' STD :3360 endl; 返回0; } 测试结果 visual studio 输入窗口输出如下结果
检测内存学习! dumping objects-c :usersadministratorsourcereposproject1project1. CPP { 24 } : } usersadministratorsourcerepos _ project1 project project1. CPP (35 ) : { 159 } normalblockat0x 00 B3 f 838 882CB400C:(sers )管理员项目1 (项目1.CPP (24 ) : { 158 } normalblockat0x 00 b 41 c 58,4096 bytes long.4096 administratorsourcereposproject1 project1 project1. CPP (46 ) 3360 { 157 } normalblockat0x 00 B3 f 880
结果分析:
Project1.cpp(24 )内存泄漏位置在文件project1.CPP的第24行中
{160} :表示运行进程后的第160次内存分配
0x00B42C88 :此内存的起始地址
4096字节:内存分配大小
data : cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcddcdcd :写入此内存空间的内容