代碼可能存在內(nèi)存泄露怎么辦?
使用valgrind
可以對(duì)代碼進(jìn)行內(nèi)存泄露檢測(cè)。
valgrind下載安裝
安裝:
1、tar –jxvf valgrind-3.21.0.tar.bz2
2、cd valgrind-3.21.0
3、./configure --prefix=/home/book/valgrind-3.21.0/install
4、make
5、make install
--prefix為指定安裝路徑,可以不指定,使用默認(rèn)的,即執(zhí)行./configure
內(nèi)存泄露測(cè)試
測(cè)試程序test.c
:
分配40
個(gè)字節(jié)的buffer
,越界訪問(wèn)buf[10]
.
#include < stdio.h >
#include < stdlib.h >
#include < unistd.h >
void test()
{
int *buf = (int *)malloc(10*sizeof(int));
buf[10] = 0x55;
}
int main()
{
test();
return 0;
}
編譯:
gcc -g -o test test.c
編譯時(shí)注意加上-g
選項(xiàng)
使用valgrinid
測(cè)試:
./valgrind --leak-check=yes ./test
結(jié)果顯示,產(chǎn)生錯(cuò)誤的地方在test.c
的15
行main
函數(shù)中,即調(diào)用test()
函數(shù)。具體的在test.c
的第9
行,test
函數(shù)內(nèi),即buf[10] = 0x55;
語(yǔ)句。
根據(jù)提示信息,可知valgrind
檢測(cè)到了2個(gè)錯(cuò)誤:
- 存在無(wú)效的寫(xiě)入數(shù)據(jù),即數(shù)組越界訪問(wèn)
- 內(nèi)存泄露,分配了
40
字節(jié)沒(méi)有釋放
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
測(cè)試
-
Linux
-
內(nèi)存
-
代碼
-
Valgrind
相關(guān)推薦
Valgrind可以檢測(cè)內(nèi)存泄漏和內(nèi)存違例,但是用Valgrind生成的日志信息結(jié)合kcachegrind就可以查看C程序的執(zhí)行線路圖,調(diào)用
發(fā)表于 05-07 08:45
?6381次閱讀
代碼可能存在內(nèi)存泄露怎么辦?
發(fā)表于 08-21 15:30
?362次閱讀
Valgrind是一套Linux下,開(kāi)放源代碼(GPL V2)的仿真調(diào)試工具的集合。
發(fā)表于 11-08 09:41
?1651次閱讀
。(棧)5、采用mmap方式映射到虛擬地址空間中的內(nèi)存段這是我的機(jī)器上,redis 進(jìn)程的情況,第一行:從r-xp可知其權(quán)限為只讀、可執(zhí)行,該段內(nèi)存地址對(duì)應(yīng)于執(zhí)行文件的代碼段,程序的代碼
發(fā)表于 07-09 08:15
我想使用UCOSOIII+MALLOC進(jìn)行內(nèi)存管理,看了半天不會(huì)使用,請(qǐng)問(wèn)有移植教程或者工程嗎?求助各位大神幫忙。PS:我使用的是STM32F407探索者的開(kāi)發(fā)板
發(fā)表于 10-28 02:28
我想與使用FPGA進(jìn)行內(nèi)存映射(A0-A26和D0-D15)的GPMC接口進(jìn)行通信。哪些是我需要在FPGA中考慮GPMC通信的所有控制信號(hào)?
發(fā)表于 05-01 12:09
本文介紹了一種利用調(diào)試軟件Valgrind進(jìn)行嵌入式應(yīng)用程序錯(cuò)誤查找的技術(shù),利用它可以高效、自動(dòng)地查找出程序中的多種錯(cuò)誤。首先介紹了嵌入式程序常見(jiàn)錯(cuò)誤,接著研究了Valgrind的工作原理,介紹了利用
發(fā)表于 04-23 06:49
嵌入式內(nèi)存檢測(cè)工具-valgrind移植源碼較快)準(zhǔn)備:解壓tar -jxvf valgrind-3.16.1.tar.bz2進(jìn)入valgrind
發(fā)表于 12-17 07:56
嵌入式開(kāi)發(fā)-內(nèi)存對(duì)齊最近項(xiàng)目中遇到程序報(bào)Bus error,經(jīng)排查發(fā)現(xiàn)是內(nèi)存對(duì)齊的原因?qū)е碌倪@個(gè)問(wèn)題,在此紀(jì)錄總結(jié)下一、為什么要進(jìn)行內(nèi)存對(duì)齊操作平臺(tái)原因(移植原因):不是所有的硬件平臺(tái)都能訪問(wèn)任意
發(fā)表于 12-17 06:34
面試題目匯總最重要:簡(jiǎn)單又重點(diǎn)突出的自我介紹!1、內(nèi)存泄露和內(nèi)存溢出是什么意思2、static的使用3、break 和continue的區(qū)別4、指針函數(shù)和函數(shù)指針的區(qū)別5、數(shù)組和鏈表的區(qū)別
發(fā)表于 12-20 07:47
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內(nèi)存調(diào)試工具,它可以對(duì)編譯后的二進(jìn)制程序進(jìn)行內(nèi)存使用監(jiān)測(cè)(C語(yǔ)言中的malloc和free,以及
發(fā)表于 04-02 14:33
?575次閱讀
的。其實(shí)不然,防止內(nèi)存泄露要從良好的編程習(xí)慣做起,另外重要的一點(diǎn)就是要加強(qiáng)單元測(cè)試(Unit Test),而valgrind就是這樣一款優(yōu)秀的工具。
發(fā)表于 06-20 11:01
?3105次閱讀
“手機(jī)的“內(nèi)存”通常指“運(yùn)行內(nèi)存”及“非運(yùn)行內(nèi)存”。手機(jī)的“運(yùn)行內(nèi)存”相當(dāng)于電腦的內(nèi)存,即RAM。而手機(jī)的“非運(yùn)
發(fā)表于 07-30 14:17
?6697次閱讀
valgrind 是一個(gè)提供了一些 debug 和優(yōu)化的工具的工具箱,可以使得你的程序減少內(nèi)存泄漏或者錯(cuò)誤訪問(wèn)。valgrind 默認(rèn)使用 memcheck 去檢查內(nèi)存問(wèn)題。memch
發(fā)表于 05-23 09:30
?2233次閱讀
一、mtrace分析內(nèi)存泄露 mtrace(memory trace),是 GNU Glibc 自帶的內(nèi)存問(wèn)題檢測(cè)工具,它可以用來(lái)協(xié)助定位內(nèi)存
發(fā)表于 11-13 10:55
?1220次閱讀
評(píng)論