C++内存泄露及检查定位代码泄露位置(支持VS2017)

内存泄露:常见的new创建的对象没有delete释放掉,导致内存的泄露,以后这部分空间将无法再被使用,就会产生Heap Leak。

两种方法检查代码中存在的内存泄漏:使用自带的库和使用工具。

一 使用自带的库crtdbg.h

不用安装工具,但需要不断的手动修改中断位置。


#include <crtdbg.h>
int main()
{
    //_CrtSetBreakAlloc(77); //在申请指定内存的位置中断
    int *p = new int[10];
    _CrtDumpMemoryLeaks();//检查内存泄漏
    return 0;
}

在main函数最后加_CrtDumpMemoryLeaks(); 然后debug调试程序,会输出泄露的内存位置。

Detected memory leaks!
Dumping objects ->
{77} normal block at 0x008F5500, 40 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

{77}是内存泄露定位值,有40字节泄露。

在main函数开始加_CrtSetBreakAlloc(77); 然后调试,会在申请指定内存(77)的位置中断。

二、安装工具

下载安装vld-2.5-setup.exe 百度搜索或云盘下载https://pan.baidu.com/s/1FHK7jk87EIzFF-0ipaeCSA

直接默认安装即可。会提示关闭VS,然后自动配置VS。

此工具好像不支持2017(会提示内存泄漏,但不定位行号),需要修改。

用以下VS2017的两个dll替换VLD的。

%programfiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\Cpp\dbghelp.dll 到 %programfiles(x86)%\Visual_Leak_Detector\bin\Win32

%programfiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\Cpp\x64\dbghelp.dll 到 %programfiles(x86)%\Visual_Leak_Detector\bin\Win64

#include "vld.h" 然后调试就会定位行号了。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值