VisualC++没有默认启动内存泄露检测,即如果某段代码产生内存溢出也不会在“输出窗口”调试标签下输出内存溢出相关信息

(1)需要手工添加代码检测

#define _CRTDBG_MAP_ALLOC//顺序改变后 函数可能无法正常工作

#include <stdlib.h>

#include <crtdbg.h>//可以将函数malloc()和free()映射到对应的调试板本的_malloc_dbg,_free_dbg, 该函数会跟踪内存分配和释放

(2)添加以上代码后,可以在程序要检测内存泄露的地方加入函数_CrtDumpMemoryLeaks(),来报告内存泄露信息,如下:

#include <stdio.h>//printf等函数的包含文件
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

void main()
{
int* iArray=(int*)malloc(sizeof(int));//动态分配空间
for(int i=0;i<100;i++)
{
   iArray=(int*)realloc(iArray,(i+1)*sizeof(int));
   printf("%08x",(int)iArray);
   iArray[i]=i+1;
}
for(i=0;i<100;i++)
   printf("%5d",iArray[i]);
_CrtDumpMemoryLeaks();//报告内存泄露函数
}

调试后,输出窗口出现

{153} normal block at 0x00631B90, 400 bytes long.//内存溢出信息

对应语句为: iArray=(int*)realloc(iArray,(i+1)*sizeof(int));

(3)设置CRT报告模式

默认下 _CrtDumpMemoryLeaks输出泄露内存信息到“输出窗口”的调试标签,这样较难看出,所以可以用_CrtSetReportMode()进行重置,函数原型:                           int_CrtSetReportMode(int reportType,int reportMode) reportType有_CRT_WARN,_CRT_ERROR,_CRT_ASSERT;

reportMode有_CRTDBG_MODE_DEBUG\\输出信息到调试标签页,

_CRTDBG_MODE_WNDW   \\创建带有中断 重试的信息提示框(建议使用);

和_CRTDBG_MODE_FILE    \\输出信息到指定文件,其中_CrtSetReportFile()函数来定义用户文件

(4)使用_CrtSetDbgFlag

对于多出口的程序,每个出口位置都使用_CrtDumpMemoryLeaks();//报告内存泄露函数将会需要输入很多次,

这时可以使用在程序开始处包含如下语句

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEN_DF,_CRTDBG_LEAK_CHECK_DF)     即如下程序无论从哪退出都可以自动调用_CrtDumpMemoryLeaks();检测.
转自:http://hi.baidu.com/pro_hc/blog/item/dcddc0f2c7d8ef5b342acc2e.html

转载于:https://www.cnblogs.com/duzouzhe/archive/2009/12/16/1625933.html

利用VC检测程序内存溢出(转)相关推荐

  1. 下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.

    ========下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.飞秋2010下载官网主要是堆HEAP大小如何控制以及优化.以减轻GC突发性负担及这个时候服务器当机的可能*. 对于 ...

  2. android内存检测方法,Android_Android系统检测程序内存占用各种方法,1.检查系统总内存 复制代码 - phpStudy...

    Android系统检测程序内存占用各种方法 1.检查系统总内存 liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal:         840868 kB ...

  3. 软件测试app内存溢出,检测APP内存溢出LeakCanary

    名称 LeakCanary 语言 Android 平台 GitHub 作者 square 日常工作中开发APP,我们很多习惯不好的代码风格可能会带来内存溢出,内存溢出在每个APP多多少少都会出现,我们 ...

  4. 总结Java程序内存溢出原因

    目录 内存溢出和内存泄漏 直接内存溢出 堆溢出 方法区溢出 这篇日志总结下Java程序中的发生内存溢出的一些原因,我们知道JVM堆空间十分重要,大部分对象在创建时都是放在堆中(除了一些逃逸对象是栈上分 ...

  5. Linux启动检测内存条错误,linux检测程序内存泄漏和内存错误

    在linux的开发程序的时候,可以很方便的使用valgrind这个工具方便检测内存泄漏和内存错误. 安装很方便: debian(如ubuntu) sudo apt-get install valgri ...

  6. 完美收官!java程序内存溢出找原因

    原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为"已支付" 扣减相 ...

  7. android 内存占用工具,Android系统检测程序内存占用各种方法

    1.检查系统总内存 liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal:         840868 kB MemFree:          457 ...

  8. Hive 程序内存溢出错误分析

    原hive程序: INSERT OVERWRITE TABLE MID_RES_LINK_LGC_BT PARTITION ( local_area_id = 20, dt = '20130831' ...

  9. 栈上内存溢出漏洞利用之Return Address

    程序员大多都碰到过栈上内存溢出溢出,最常见的结果是导致程序Crash,有时候也有可能因为覆盖栈上的信息导致程序执行一些意想不到的逻辑,这种情况往往比起Crash更加糟糕. 在阅读本文之前,最好熟悉&l ...

最新文章

  1. 集成学习+ensemble learning
  2. 根据下拉框生成控件列表
  3. 学习MSCKF笔记——四元数基础
  4. 如何在面试中有条理的回答用户体验方面的问题
  5. 【学习笔记】《数据挖掘:理论与算法》CH4神经网络
  6. 05-WIFI通讯客户端搭建
  7. deLPHI书籍名称
  8. 最大公约数,最小公倍数,质因式分解
  9. Java基础-hashMap原理剖析
  10. 朱海舟宣布新一批应用已经适配锤子TNT 网友:救救海舟
  11. 【算法学习】【图像增强】【Retinex】White Patch Retinex
  12. Python--Redis实战:第一章:初识Redis:第一节:Redis简介
  13. 自己的部分小软件合计 2000 - 2013
  14. tago fences v2.5
  15. 如何理解静态库与动态库
  16. 解决Mac自动切换输入法
  17. 淘宝 生成 图片二维码分享
  18. 使用Lens管理多云Kubernetes
  19. 点坐标(点云)表示的模型转为.stl文件用于3D打印
  20. VisIonPro学习笔记

热门文章

  1. c++ list 修改_ggplot2 修改图例的一些操作
  2. vue实现多行数据提交_(Vue起步)3.Vue设计模式:MVVM模式
  3. cityscapes数据集_全景分割 UPSNet 源码分析 (1) - 数据格式
  4. arcgis python实例_arcgis python脚本工具实例教程—栅格范围提取至多边形要素类
  5. java oracle管理系统_哔站播放量高达三百万的Java视频教程,如此惊人,还不来学?...
  6. python模拟太阳系_用 Python 动态模拟太阳系运转
  7. ct报告就一定准确吗_晋州市人民医院检验报告出具时间提速啦!
  8. windows下写代码在linux下编译,如何在Windows中编译Linux Unix的代码(采用cygwin)?...
  9. mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引
  10. python职业发展方向_测试的职业发展方向有哪些?该如何规划?