代碼可能存在內(nèi)存泄露怎么辦?
使用valgrind
可以對代碼進(jìn)行內(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
選項(xiàng)
使用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é)沒有釋放
-
測試
+關(guān)注
關(guān)注
8文章
5579瀏覽量
128141 -
Linux
+關(guān)注
關(guān)注
87文章
11432瀏覽量
212488 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3103瀏覽量
74918 -
代碼
+關(guān)注
關(guān)注
30文章
4883瀏覽量
70104 -
Valgrind
+關(guān)注
關(guān)注
0文章
9瀏覽量
6893
發(fā)布評論請先 登錄
檢測內(nèi)存泄漏和內(nèi)存違例,Valgrind不可少!

Linux上對進(jìn)程進(jìn)行內(nèi)存分析和內(nèi)存泄漏定位
如何實(shí)現(xiàn)FPGA進(jìn)行內(nèi)存映射的GPMC接口進(jìn)行通信?
一種利用調(diào)試軟件Valgrind進(jìn)行嵌入式應(yīng)用程序錯誤查找的技術(shù)
valgrind是怎樣去移植源碼的
為什么要進(jìn)行內(nèi)存對齊操作呢
內(nèi)存泄露和內(nèi)存溢出是什么意思
Linux C/C++內(nèi)存泄漏檢測工具:Valgrind
內(nèi)存泄漏的檢測方法
闡述手機(jī)內(nèi)存與運(yùn)行內(nèi)存中的關(guān)系及區(qū)別
valgrind檢測內(nèi)存問題的原理

mtrace分析內(nèi)存泄露

評論