定位C++内存泄漏代码段具体位置

本文介绍了一种在C++中检测内存泄漏的方法,通过自定义new运算符并结合_CrtDumpMemoryLeaks函数来定位内存泄漏的位置。适用于调试阶段查找潜在的内存管理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STEP1:

定义一个头文件,例如configure.h,用于存放一些配置项:

#pragma once
#include<iostream>
using namespace std;
#define _CRTDBG_MAP_ALLOC  // MEMORY_LEAKS_STEP01
#include <stdlib.h>  
#include <crtdbg.h>
#define new  new(_CLIENT_BLOCK, __FILE__, __LINE__) 

STEP2

定义一个函数LeakDetect,名字任意,放在哪里也随意,前提是放到可以使用configure.h头文件的位置处。

void LeakDetect(char * p, int num){//MEMORY_LEAKS_STEP02
    p = (char *)malloc(sizeof(char) * num);
}

STEP3

对于一个待检测的代码段,首先在这个代码段前面定义一些变量,用以存储信息,然后再代码段执行结束的位置调用_CrtDumpMemoryLeaks()函数。整体结构如下:

char *str=NULL;
LeakDetect(str, 100);

....................
...要检测的代码块...
....................

_CrtDumpMemoryLeaks();

STEP4

再输出窗口观察内存泄露信息,这里会提示具体的内存泄漏的代码位置。

注意事项

有时候会无法看到内存泄漏的具体函数名,这是因为没有加载PDB符号,将该符号加入到工程中即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值