C/C++程序内存泄漏检测

本文详细介绍了C++中如何使用预定义宏和函数进行内存管理与内存泄漏检测,包括设置调试标志、检查内存泄漏及使用内存检查点统计泄漏信息。

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


1. 包含头文件和定义:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。

2. 方法一
在程序入口写几个语句:
 int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
 tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
 _CrtSetDbgFlag( tmpFlag );
程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息。

3. 方法二
在程序任何地方用以下语句:
_CrtDumpMemoryLeaks();
随时检测打印内存泄漏信息,如果有的话。不过此用法有个局限,对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待。

4. 方法三
使用_CrtMemCheckpoint方法,在某段程序中统计泄漏信息。如下:
 _CrtMemState s1, s2, s3;
 _CrtMemCheckpoint( &s1 );
 
 // 程序段1:DO SOMETHING

 _CrtMemCheckpoint( &s2 );
 if ( _CrtMemDifference( &s3, &s1, &s2) )
  _CrtMemDumpStatistics( &s3 );

可以统计程序段1中是否发生了内存泄漏。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值