VS中捕获内存泄露
admin
2023-07-30 16:22:16
0

VS中捕获内存泄露

内存泄露十分讨厌,捕获内存泄露更加令人厌烦……

其实,VS本身就有内存泄露的检测机制。只需做以下操作即可开启。(同时必须在debug模式 下运行程序并且以 正常流程退出 )

  1. // 在入口函数cpp中添加以下定义和头文件   

  2. #define CRTDBG_MAP_ALLOC   

  3. #include    

  4. #include    

  5. // 在入口函数一开始添加以下代码   

  6. _CrtDumpMemoryLeaks();  

  7.     _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );  

  8. // 在入口函数cpp中添加以下定义和头文件  

  9. #define CRTDBG_MAP_ALLOC  

  10. #include   

  11. #include   

  12. // 在入口函数一开始添加以下代码  

  13. _CrtDumpMemoryLeaks();  

  14.     _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );   

然后在以 正常流程退出 程序后, 就会在输出窗口显示出内存泄露的信息了。

注意!重点来了。

虽然VS检测出来了哪里有了内存泄露, 但是有可能你得到的有效信息只有两个 (如下)

1. 未释放的内存大小。(绿色部分 )

2. 这块内存是程序中总计第几个被申请的。(蓝色部分 )。

3. 而申请空间所在代码的位置可能不会被显示(删除线部分 )。

Detected memory leaks! Dumping objects -> C:/PROGRAM FILES/VISUAL STUDIO/MyProjects/leaktest/leaktest.cpp(20) : {18 } 
normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

那么, 如果出现了这种情况, 其实是根本无法知道哪里出了问题。那么这个时候该怎么办呢?

这个时候需要使用这个函数。

 

  1. //num就是刚刚检测出来的内存泄露的地方大括号内的数字   

  2. _CrtSetBreakAlloc(num);  

  3. //num就是刚刚检测出来的内存泄露的地方大括号内的数字  

  4. _CrtSetBreakAlloc(num);  


这个函数的作用是,在你运行程序的时候,会在第num次申请空间时断点。

所以,你需要重新运行一遍程序 。(只要流程一样,内存申请顺序肯定是一样的,所以会正确的在需要的地方断掉。)

注意,之前提示的内存泄露中大括号内的数值就是指的第几次申请的空间泄露了。

这个时候查看堆栈调用 ,即可知道到底是在哪里申请了内存但是忘记释放掉了。然后将这块内存在合适的时候释放掉就行了。


相关内容

热门资讯

峰会召开在即,土耳其多地爆发反... 当地时间7月7日至8日,北约峰会即将在土耳其首都安卡拉举行,届时将有32名盟国领导人以及北约伙伴国官...
青海博物馆回应观音像现“TCL... 今日,青海省博物馆发布关于观众反映国家一级文物明永乐款鎏金铜观音菩萨像相关情况的说明,详情:早前报道...
佛得角球员回国,现场被围得水泄... 当地时间7月5日,本届世界杯表现亮眼的佛得角队乘飞机回国,受到当地民众热烈欢迎,庆祝现场被围得水泄不...
赖当局恢复60余年前两岸对峙时... 图注:赖当局自今年起在台军内恢复60余年前两岸对峙时期的“反陆”教育。中国台湾网7月6日讯 综合台媒...
共筑心血管健康可持续新生态,第... 7月4日~5日,国内心血管领域标杆学术盛会——第九届华中心血管病大会(2026 C4)在郑举行,来自...
五预警齐发!广西等地有大暴雨、... 6日18时,水利部等部门发布红色山洪灾害气象预警、暴雨橙色预警、强对流天气黄色预警、橙色地质灾害气象...
近2米深洪水涌进1楼,敬老院1... 极目新闻记者 肖名远7月5日至6日,受台风“美莎克”影响,广西南宁市宾阳县发生洪水,该县已启动一级应...
日本欲用闲置汽车工厂生产军用无... 【文/观察者网 潘昱辰 编辑/高莘】据英国《金融时报》7月6日报道,日本最大的防务承包商三菱重工的首...
体型堪称巨无霸!超强台风“巴威... 7月6日,据中国天气消息:超强台风“巴威”有较大可能登陆我国,登陆后对我国的影响范围广、程度重,本周...
清理违法违规信息600余万条,... “清朗·整治AI应用乱象”专项行动自2026年4月启动以来,中央网信办聚焦未按规定履行大模型备案登记...