c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
OpenSSL采用C語言作為開發(fā)語言,這使得OpenSSL具有優(yōu)秀的跨平臺(tái)性能,這對于廣大技術(shù)人員來說是一件非常美妙的事情,可以在不同的平臺(tái)使用同樣熟悉的東西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平臺(tái),這使得OpenSSL具有廣泛的適用性。不過,對于目前新成長起來的C++程序員,可能對于C語言的代碼不是很習(xí)慣,但習(xí)慣C語言總比使用C++重新寫一個(gè)跟OpenSSL相同功能的軟件包輕松不少。
OpenSSL整個(gè)軟件包大概可以分成三個(gè)主要的功能部分:密碼算法庫、SSL協(xié)議庫以及應(yīng)用程序。OpenSSL的目錄結(jié)構(gòu)自然也是圍繞這三個(gè)功能部分進(jìn)行規(guī)劃的。
作為一個(gè)基于密碼學(xué)的安全開發(fā)包,OpenSSL提供的功能相當(dāng)強(qiáng)大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測試或其它目的使用。
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 提供不了下載地址了 機(jī)器上一直有,不是這次特意安裝的。
安裝VC6.0也行,反正貌似只要是c++編譯器就差不多,但是我今天安裝使用的是VS2005
安裝步驟:
1.安裝VC和ActivePerl,先后順序無所謂,安裝時(shí)注意勾選添加環(huán)境變量的選項(xiàng)。
2.解壓Openssl,解壓后會(huì)發(fā)現(xiàn)openssl-0.9.8i目錄下面有很多文件
其中的一個(gè)文件是INSTALL.W32用記事本或者其他文本編輯器打開,這個(gè)文件是介紹Win32平臺(tái)的安裝方法,我下面的批處理也是根據(jù)這個(gè)文件寫的,大家最好依據(jù)這文件的描述安裝,英文不好的,可以對照我的批處理來看,如果大家安裝的版本和我相同,那么直接使用下面的批處理安裝即可。
在INSTALL.W32相同目錄下新建一個(gè)批處理install.bat,內(nèi)容如下
@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
注意先不要執(zhí)行它,因?yàn)樾枰猇C的環(huán)境變量,建議通過開始菜單-程序-Microsoft Visual Studio 2005-Visual Studio Tools-Visual Studio 2005 命令提示-進(jìn)入cmd后通過cd 進(jìn)入到openssl-0.9.8i目錄,然后在這個(gè)cmd下執(zhí)行批處理install.bat就可以了。
注意事項(xiàng):
1.安裝時(shí)間比較長,請耐心等待
2.每個(gè)步驟間使用了pause暫停,便于觀察。每步完成后按任意鍵繼續(xù),注意有沒有報(bào)錯(cuò)。
3.可以不通過Visual Studio 2005 命令提示進(jìn)入cmd,但是一定保證cmd下有vc的環(huán)境變量,可以手工調(diào)用vc目錄下設(shè)置環(huán)境變量的批處理vcvars32.bat,在VC的安裝目錄下可以搜索到這個(gè)文件。因?yàn)椴煌姹镜膙c這個(gè)文件所在位置不同所以我就不說明它的位置了。測試是否有vc環(huán)境最簡單的測試方法是在執(zhí)行install.bat前先在cmd下執(zhí)行下cl,沒有vc環(huán)境的話會(huì)報(bào)
'cl' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
4.提示%OSVERSION% is not defined 這個(gè)錯(cuò)誤的時(shí)候可以忽略它沒關(guān)系
5.網(wǎng)上搜索到安裝前修改OpenSSL目錄下的MS目錄下的ntdll.mak文件,將CFLAG的/WX選項(xiàng)去掉,
否則cl編譯器會(huì)報(bào).\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated 建議使用_read。
因?yàn)槲沂褂梅浅:唵蔚墓δ芩晕覜]有修改它,需要的朋友可以嘗試修改它。
6.最終編譯結(jié)束會(huì)在指定安裝目錄下產(chǎn)生3個(gè)子目錄分別是bin,include,lib
本文淺談一下C++內(nèi)存泄漏的檢測,首先我們需要知道程序有沒有內(nèi)存泄露,然后定位到底是哪行代碼出現(xiàn)內(nèi)存泄露了,這樣才能將其修復(fù)。
最簡單的方法當(dāng)然是借助于專業(yè)的檢測工具,比較有名如BoundsCheck工具,功能非常強(qiáng)大,相信做C++開發(fā)的人都離不開它。此外就是不使用任何工具,而是自己來實(shí)現(xiàn)對內(nèi)存泄露的監(jiān)控,分如下兩種情況:
一. 在 MFC 中檢測內(nèi)存泄漏
假如是用MFC的程序的話,很簡單。默認(rèn)的就有內(nèi)存泄露檢測的功能。
我們用VS2005生成了一個(gè)MFC的對話框的程序,發(fā)現(xiàn)他可以自動(dòng)的檢測內(nèi)存泄露.不用我們做任何特殊的操作. 仔細(xì)觀察,發(fā)現(xiàn)在每個(gè)CPP文件中,都有下面的代碼:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
DEBUG_NEW 這個(gè)宏定義在afx.h文件中,就是它幫助我們定位內(nèi)存泄漏。
在含有以上代碼的cpp文件中分配內(nèi)存后假如沒有刪除,那么停止程序的時(shí)候,VisualStudio的Output窗口就會(huì)顯示如下的信息了:
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就會(huì)打開該文件,定位到該行,很容易看出是哪出現(xiàn)了內(nèi)存泄露。
總結(jié)
以上是生活随笔為你收集整理的c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C盘满了怎么办?最强清理工具来了
- 下一篇: [转]收集android上开源的酷炫的交