简易 查找VS2008控制台内存泄露

     由于在学习C++,其中经常一个问题就是内存管理问题。
1.内存泄露问题
     就是通过动态分配的内存,但是在程序结束的时候,并没有释放掉,而导致的问题。这个问题特别出现在连续24小时工作的平台上,一般有这样的问题,时间一久就内存不断减少,直至系统崩溃。
2.在MFC程序中,已经有了内存检查机制。如何在控台程序中也出现呢?
     希望的就是,在程序退出之前检查是否有内存泄露,也就是动态申请的内存有没有释放掉。一旦有的话,就直接弹出一个对话框,提示。而且可以定位到具体哪行可能出现的泄露问题。
     将具体的信息做成一个头文件,然后放置到在每个工程中,再在程序中Include该头文件。在main函数注册一下。atexit(Exit)一下。具体的见下图。

3.步骤
①添加测试文件


如上是我建立的一个控制台工程,将TestMemoryLeak.h加入到该工程中。该文件的代码为:

#include <assert.h>
#ifdef _DEBUG
#define DEBUG_NORMALBLOCK    new( _NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NORMALBLOCK
#endif
#define _CRTDBG_MAP_ALLOC //添加内存映射信息 可以看出在哪个文件哪行 内存泄露
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_NORMALBLOCK
#endif

void Exit()
{
	int i = _CrtDumpMemoryLeaks(); //一旦有内存泄露返回 非0
	assert( i == 0); //assert后面是个布尔值 为真 继续运行。为假卡住
}


② 在控制台程序中 include进去,然后在Mian函数注册一下.h文件中的有的函数 Exit.


③点击调试 F5不是 Ctrl +F5.


发现了debug error.这是因为assert导致的。

④ 如何定位具体的哪个行代码呢?

在点击终止后,查看输出窗口。


看到了信息。双击输出的源文件那行。自动定位到 内存泄露的地方。


具体头文件中什么意思。Exit函数什么意思。可以自行查找。这个只是简单的在控制台使用,因为只有一个出口,对于多出口的就不好使了。具体很多调试技术,网上也有很多。

特别要注意的是:你控制台程序的输入输出不要使用iostream.使用stdio.h。不然编译不通过。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值