利用CRT库函数检查内存泄漏

本文介绍了如何在Debug模式下使用CRT库(如_CrtDumpMemoryLeaks)来检测内存泄漏,包括设置断点、报告当前内存泄漏以及使用_CrtSetDbgFlag确保在程序结束时输出所有内存泄漏信息。

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

条件:

1. 在Debug模式下。

2.#define _CRTDBG_MAP_ALLOC
   #include "stdlib.h"
   #include "crtdbg.h"

 

_CrtDumpMemoryLeaks()可以打印出目前为止没有释放的已申请内存。

// Necessary
#define _CRTDBG_MAP_ALLOC
#include "stdlib.h"
#include "crtdbg.h"


int main()
{
	int* p = new int(2);

	// Report memory leak until now.
	_CrtDumpMemoryLeaks();

	delete p;
    return 0;
}

 

上述代码输出如下:

Detected memory leaks!
Dumping objects ->
{53} normal block at 0x00394FC0, 4 bytes long.
Data: <    > 02 00 00 00
Object dump complete.

其中{53}表示第53次申请的内存没有释放。

 

_CrtSetBreakAlloc(long n)可以在Debug时让程序自动在第n次申请内存的代码处停止。

// Necessary
#define _CRTDBG_MAP_ALLOC
#include "stdlib.h"
#include "crtdbg.h"


int main()
{
	_CrtSetBreakAlloc(53);
	int* p = new int(2);

	// Report memory leak until now.
	_CrtDumpMemoryLeaks();
	
	delete p;
    return 0;
}

 

在Debug上述代码时,可以在程序停止处查看调用堆栈找到引起泄漏的内存分配代码:

1

 

当程序有多个退出点时,可以调用Using _CrtSetDbgFlag()让程序在结束时输出内存泄漏信息。

// Necessary
#define _CRTDBG_MAP_ALLOC
#include "stdlib.h"
#include "crtdbg.h"


int main()
{
	_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
	int* p = new int(2);

    return 0;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值