c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。不过,对于目前新成长起来的C++程序员,可能对于C语言的代码不是很习惯,但习惯C语言总比使用C++重新写一个跟OpenSSL相同功能的软件包轻松不少。
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
Openssl版本0.9.8i
ActivePerl版本5.8.8.822 Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi">http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi
编译器VS2005 提供不了下载地址了 机器上一直有,不是这次特意安装的。
安装VC6.0也行,反正貌似只要是c++编译器就差不多,但是我今天安装使用的是VS2005
安装步骤:
1.安装VC和ActivePerl,先后顺序无所谓,安装时注意勾选添加环境变量的选项。
2.解压Openssl,解压后会发现openssl-0.9.8i目录下面有很多文件
其中的一个文件是INSTALL.W32用记事本或者其他文本编辑器打开,这个文件是介绍Win32平台的安装方法,我下面的批处理也是根据这个文件写的,大家最好依据这文件的描述安装,英文不好的,可以对照我的批处理来看,如果大家安装的版本和我相同,那么直接使用下面的批处理安装即可。
在INSTALL.W32相同目录下新建一个批处理install.bat,内容如下
@rem --prefix 指定安装目录
perl Configure VC-WIN32 --prefix=D:/SYJ.WORK/SYJ.ENV/openssl
pause
call ms\do_ms
pause
nmake -f ms\ntdll.mak
pause
nmake -f ms\ntdll.mak test
pause
nmake -f ms\ntdll.mak install
pause
注意先不要执行它,因为需要VC的环境变量,建议通过开始菜单-程序-Microsoft Visual Studio 2005-Visual Studio Tools-Visual Studio 2005 命令提示-进入cmd后通过cd 进入到openssl-0.9.8i目录,然后在这个cmd下执行批处理install.bat就可以了。
注意事项:
1.安装时间比较长,请耐心等待
2.每个步骤间使用了pause暂停,便于观察。每步完成后按任意键继续,注意有没有报错。
3.可以不通过Visual Studio 2005 命令提示进入cmd,但是一定保证cmd下有vc的环境变量,可以手工调用vc目录下设置环境变量的批处理vcvars32.bat,在VC的安装目录下可以搜索到这个文件。因为不同版本的vc这个文件所在位置不同所以我就不说明它的位置了。测试是否有vc环境最简单的测试方法是在执行install.bat前先在cmd下执行下cl,没有vc环境的话会报
'cl' 不是内部或外部命令,也不是可运行的程序
4.提示%OSVERSION% is not defined 这个错误的时候可以忽略它没关系
5.网上搜索到安装前修改OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,
否则cl编译器会报.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated 建议使用_read。
因为我使用非常简单的功能所以我没有修改它,需要的朋友可以尝试修改它。
6.最终编译结束会在指定安装目录下产生3个子目录分别是bin,include,lib
本文浅谈一下C++内存泄漏的检测,首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复。
最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck工具,功能非常强大,相信做C++开发的人都离不开它。此外就是不使用任何工具,而是自己来实现对内存泄露的监控,分如下两种情况:
一. 在 MFC 中检测内存泄漏
假如是用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。
我们用VS2005生成了一个MFC的对话框的程序,发现他可以自动的检测内存泄露.不用我们做任何特殊的操作. 仔细观察,发现在每个CPP文件中,都有下面的代码:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
DEBUG_NEW 这个宏定义在afx.h文件中,就是它帮助我们定位内存泄漏。
在含有以上代码的cpp文件中分配内存后假如没有删除,那么停止程序的时候,VisualStudio的Output窗口就会显示如下的信息了:
Detected memory leaks!
Dumping objects ->
d:\code\mfctest\mfctest.cpp(80) : {157} normal block at 0x003AF170, 4 bytes long.
Data: < > 00 00 00 00
Object dump complete.
在Output窗口双击粗体字那一行,那么IDE就会打开该文件,定位到该行,很容易看出是哪出现了内存泄露。
c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)相关推荐
- C++ 实现内存泄露检查
内存泄漏一直是 C++ 中比较令人头大的问题, 即便是很有经验的 C++程序员有时候也难免因为疏忽而写出导致内存泄漏的代码.除了基本的申请过的内存未释放外,还存在诸如异常分支导致的内存泄漏等等.本项目 ...
- VC内存泄露检查工具:VisualLeakDetector
From: http://www.xdowns.com/article/170/Article_3060.html 初识Visual Leak Detector 灵活自由是C/C++语言 ...
- linux c 内存泄露 检查工具
Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄漏,了解了一下相关的知识. 所有使用动态内存分配(dy ...
- Linux下几款C++程序中的内存泄露检查工具
Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄露,了解了一下相关的知识. 所有使用动态内存分配(dy ...
- Android C++ Native 内存泄露检查工具Raphael使用介绍
Android C++ Native 内存泄露检查工具使用介绍 实现原理 使用方法 Raphael添加到测试apk 添加项目依赖 同步gradle 启动泄露检测功能 直接使用boardcast功能控制 ...
- IOS应用内存泄露问题的检测及定位
IOS应用内存泄露问题的检测及定位 问题描述:最近新开发了一个Puzzle项目,场景内容包含35个,发现每次选择最多块数的时候会出现崩溃bug,Xcode的Bug日志也不太能看出来问题所在,直到看到& ...
- python 单例模式内存泄露_彻底搞懂Java内存泄露
之前一直在简书写作,第一次发布到SF上来,也是第一次使用SF,后面会尽量同步到SF,更多文章请关注: 简书 编程之乐 转载请注明出处:谢谢! Java内存回收方式 Java判断对象是否可以回收使用的而 ...
- SQL Server 内存泄露(memory leak)——游标导致的内存问题
原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...
- 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法
最近朋友推荐了一篇关于内存溢出与内存泄漏的文章,感觉写的还不错,于是便在网上搜索了一番,对这块进行了加固,发现自己之前写的代码也存在一些内存泄漏的风险,所以弄懂内存泄漏与内存溢出是很有利于我们提高代码 ...
- python会不会内存泄露_记一次python 内存泄漏问题及解决过程 python 嵌套读取文件 内存泄露...
如何解决Python2的内存泄漏问题 python本身不会造成内存泄露,如果用的C/C++写的模块(包),如果处理不好,可能会造成内存泄露,但是也是C/C++的模块造成的 欢迎来到四十五资源网,pyt ...
最新文章
- android 应用uid,android adb 获取所有app 的uid
- Channel Allocation HDU1373
- 【HDU - 5187】zhx's contest (快速幂+ 快速乘,模板)
- python自学行吗-python自学行吗 有哪些用处
- 吴恩达神经网络和深度学习-学习笔记-20-训练/开发/测试集划分
- iframe加载完成后操作contentDocument
- 最近几天,VirtualBox虚拟机坏了多次,备份很重要
- Android中的App网络传输协议
- 计算机绘图CAD实训指导,【精品】CAD计算机绘图实习指导书
- 学习CPP看过的博客
- Java如何把文档转换成PDF
- 【博学谷学习记录】超强总结,用心分享丨一款钻戒网站的html、css
- 如何使用if嵌套结构;实现用户输入个人的身高和体重,计算出国际肥胖指标BMI值,并判断输出您属于 哪种体型
- JDK15已发布!网友:我还在JDK8踏步走...
- 免费英文文献查询网站(生物医学) (转载)
- grease monkey setTimeout
- 51单片机基础理论知识(会补充)
- 真心话大冒险的暴强回复
- 闲人闲谈PS之三十二——业务工程预算和PS成本计划
- 物联网卡相关的商业模式