简易 查找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
    评论
当使用Visual Studio 2017时,控制台程序闪退可能是由多种原因引起的。以下是一些可能的原因和解决方法: 1. 代码错误:检查你的代码是否存在语法错误、逻辑错误或者内存访问错误。这些错误可能导致程序崩溃并闪退。仔细检查代码并修复错误。 2. 编译器问题:确保你使用的是最新版本的Visual Studio 2017,并且已经安装了所有的更新和补丁。有时,编译器本身可能存在问题,更新版本可能会修复这些问题。 3. 内存问题:如果你的程序使用了大量的内存,可能会导致闪退。确保你正确地分配和释放内存,并避免内存泄漏。 4. 第三方库冲突:如果你的程序使用了第三方库,可能存在与Visual Studio 2017不兼容的情况。尝试更新或替换第三方库,并确保与Visual Studio 2017兼容。 5. 硬件问题:有时,闪退可能是由于硬件问题引起的。检查你的计算机是否存在硬件故障或不稳定的情况,例如内存问题或过热问题。 如果以上方法都无法解决问题,建议尝试以下步骤: 1. 重新安装Visual Studio 2017:卸载并重新安装Visual Studio 2017,确保安装过程中没有出现错误。 2. 创建新的项目:尝试创建一个新的控制台项目,并编写简单的代码进行测试。如果新项目可以正常运行,说明问题可能出现在你之前的项目中。 3. 联系技术支持:如果以上方法都无法解决问题,建议联系Visual Studio 2017的技术支持团队,向他们报告问题并寻求帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值