代碼可能存在內(nèi)存泄露怎么辦?
使用valgrind可以對代碼進行內(nèi)存泄露檢測。
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)存泄露測試
測試程序test.c:
分配40個字節(jié)的buffer,越界訪問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
編譯時注意加上-g選項
使用valgrinid測試:
./valgrind --leak-check=yes ./test

結(jié)果顯示,產(chǎn)生錯誤的地方在test.c的15行main函數(shù)中,即調(diào)用test()函數(shù)。具體的在test.c的第9行,test函數(shù)內(nèi),即buf[10] = 0x55;語句。
根據(jù)提示信息,可知valgrind檢測到了2個錯誤:
- 存在無效的寫入數(shù)據(jù),即數(shù)組越界訪問
- 內(nèi)存泄露,分配了
40字節(jié)沒有釋放
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
測試
+關(guān)注
關(guān)注
9文章
6211瀏覽量
131380 -
Linux
+關(guān)注
關(guān)注
88文章
11763瀏覽量
219079 -
內(nèi)存
+關(guān)注
關(guān)注
9文章
3211瀏覽量
76379 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73999 -
Valgrind
+關(guān)注
關(guān)注
0文章
9瀏覽量
7106
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
檢測內(nèi)存泄漏和內(nèi)存違例,Valgrind不可少!
Valgrind可以檢測內(nèi)存泄漏和內(nèi)存違例,但是用Valgrind生成的日志信息結(jié)合kcachegrind就可以查看C程序的執(zhí)行線路圖,調(diào)用
如何實現(xiàn)FPGA進行內(nèi)存映射的GPMC接口進行通信?
我想與使用FPGA進行內(nèi)存映射(A0-A26和D0-D15)的GPMC接口進行通信。哪些是我需要在FPGA中考慮GPMC通信的所有控制信號?
發(fā)表于 05-01 12:09
一種利用調(diào)試軟件Valgrind進行嵌入式應(yīng)用程序錯誤查找的技術(shù)
本文介紹了一種利用調(diào)試軟件Valgrind進行嵌入式應(yīng)用程序錯誤查找的技術(shù),利用它可以高效、自動地查找出程序中的多種錯誤。首先介紹了嵌入式程序常見錯誤,接著研究了Valgrind的工作原理,介紹了利用
發(fā)表于 04-23 06:49
valgrind是怎樣去移植源碼的
嵌入式內(nèi)存檢測工具-valgrind移植源碼較快)準(zhǔn)備:解壓tar -jxvf valgrind-3.16.1.tar.bz2進入valgrind
發(fā)表于 12-17 07:56
為什么要進行內(nèi)存對齊操作呢
嵌入式開發(fā)-內(nèi)存對齊最近項目中遇到程序報Bus error,經(jīng)排查發(fā)現(xiàn)是內(nèi)存對齊的原因?qū)е碌倪@個問題,在此紀(jì)錄總結(jié)下一、為什么要進行內(nèi)存對齊操作平臺原因(移植原因):不是所有的硬件平臺都能訪問任意
發(fā)表于 12-17 06:34
內(nèi)存泄露和內(nèi)存溢出是什么意思
面試題目匯總最重要:簡單又重點突出的自我介紹!1、內(nèi)存泄露和內(nèi)存溢出是什么意思2、static的使用3、break 和continue的區(qū)別4、指針函數(shù)和函數(shù)指針的區(qū)別5、數(shù)組和鏈表的區(qū)別
發(fā)表于 12-20 07:47
Linux C/C++內(nèi)存泄漏檢測工具:Valgrind
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內(nèi)存調(diào)試工具,它可以對編譯后的二進制程序進行內(nèi)存使用監(jiān)測(C語言中的malloc和free,以及
發(fā)表于 04-02 14:33
?913次閱讀
內(nèi)存泄漏的檢測方法
的。其實不然,防止內(nèi)存泄露要從良好的編程習(xí)慣做起,另外重要的一點就是要加強單元測試(Unit Test),而valgrind就是這樣一款優(yōu)秀的工具。
闡述手機內(nèi)存與運行內(nèi)存中的關(guān)系及區(qū)別
“手機的“內(nèi)存”通常指“運行內(nèi)存”及“非運行內(nèi)存”。手機的“運行內(nèi)存”相當(dāng)于電腦的內(nèi)存,即RAM。而手機的“非運
發(fā)表于 07-30 14:17
?8470次閱讀
valgrind檢測內(nèi)存問題的原理
valgrind 是一個提供了一些 debug 和優(yōu)化的工具的工具箱,可以使得你的程序減少內(nèi)存泄漏或者錯誤訪問。valgrind 默認(rèn)使用 memcheck 去檢查內(nèi)存問題。memch
mtrace分析內(nèi)存泄露
一、mtrace分析內(nèi)存泄露 mtrace(memory trace),是 GNU Glibc 自帶的內(nèi)存問題檢測工具,它可以用來協(xié)助定位內(nèi)存
系統(tǒng)內(nèi)存和運行內(nèi)存的區(qū)別
系統(tǒng)內(nèi)存和運行內(nèi)存都是計算機中重要的概念,它們在計算機的存儲和運行方面起著不可或缺的作用。雖然它們與計算機存儲和運行息息相關(guān),但是它們具有不同的功能和實現(xiàn)方式。接下來我將詳細(xì)介紹系統(tǒng)內(nèi)存和運行
內(nèi)存泄漏檢測工具Sanitizer介紹
內(nèi)存泄漏,我們經(jīng)常會遇到,如何檢測內(nèi)存泄漏,除了我們之前講過的 valgrind,還可以使用 gcc 自帶的工具 sanitizer。
如何使用valgrind對代碼進行內(nèi)存泄露檢測
評論