代碼可能存在內存泄露怎么辦?
使用valgrind
可以對代碼進行內存泄露檢測。
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為指定安裝路徑,可以不指定,使用默認的,即執行./configure
內存泄露測試
測試程序test.c
:
分配40
個字節的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
結果顯示,產生錯誤的地方在test.c
的15
行main
函數中,即調用test()
函數。具體的在test.c
的第9
行,test
函數內,即buf[10] = 0x55;
語句。
根據提示信息,可知valgrind
檢測到了2個錯誤:
- 存在無效的寫入數據,即數組越界訪問
- 內存泄露,分配了
40
字節沒有釋放
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
測試
+關注
關注
8文章
5278瀏覽量
126603 -
Linux
+關注
關注
87文章
11294瀏覽量
209345 -
內存
+關注
關注
8文章
3020瀏覽量
74008 -
代碼
+關注
關注
30文章
4780瀏覽量
68529 -
Valgrind
+關注
關注
0文章
9瀏覽量
6807
發布評論請先 登錄
相關推薦
Linux上對進程進行內存分析和內存泄漏定位
。(棧)5、采用mmap方式映射到虛擬地址空間中的內存段這是我的機器上,redis 進程的情況,第一行:從r-xp可知其權限為只讀、可執行,該段內存地址對應于執行文件的代碼段,程序的代碼
發表于 07-09 08:15
如何用UCOSOIII+MALLOC進行內存管理?
我想使用UCOSOIII+MALLOC進行內存管理,看了半天不會使用,請問有移植教程或者工程嗎?求助各位大神幫忙。PS:我使用的是STM32F407探索者的開發板
發表于 10-28 02:28
如何實現FPGA進行內存映射的GPMC接口進行通信?
我想與使用FPGA進行內存映射(A0-A26和D0-D15)的GPMC接口進行通信。哪些是我需要在FPGA中考慮GPMC通信的所有控制信號?
發表于 05-01 12:09
一種利用調試軟件Valgrind進行嵌入式應用程序錯誤查找的技術
本文介紹了一種利用調試軟件Valgrind進行嵌入式應用程序錯誤查找的技術,利用它可以高效、自動地查找出程序中的多種錯誤。首先介紹了嵌入式程序常見錯誤,接著研究了Valgrind的工作原理,介紹了利用
發表于 04-23 06:49
valgrind是怎樣去移植源碼的
嵌入式內存檢測工具-valgrind移植源碼較快)準備:解壓tar -jxvf valgrind-3.16.1.tar.bz2進入valgrind
發表于 12-17 07:56
為什么要進行內存對齊操作呢
嵌入式開發-內存對齊最近項目中遇到程序報Bus error,經排查發現是內存對齊的原因導致的這個問題,在此紀錄總結下一、為什么要進行內存對齊操作平臺原因(移植原因):不是所有的硬件平臺都能訪問任意
發表于 12-17 06:34
內存泄露和內存溢出是什么意思
面試題目匯總最重要:簡單又重點突出的自我介紹!1、內存泄露和內存溢出是什么意思2、static的使用3、break 和continue的區別4、指針函數和函數指針的區別5、數組和鏈表的區別
發表于 12-20 07:47
Linux C/C++內存泄漏檢測工具:Valgrind
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內存調試工具,它可以對編譯后的二進制程序進行內存使用監測(C語言中的malloc和free,以及
發表于 04-02 14:33
?617次閱讀
內存泄漏的檢測方法
的。其實不然,防止內存泄露要從良好的編程習慣做起,另外重要的一點就是要加強單元測試(Unit Test),而valgrind就是這樣一款優秀的工具。
闡述手機內存與運行內存中的關系及區別
“手機的“內存”通常指“運行內存”及“非運行內存”。手機的“運行內存”相當于電腦的內存,即RAM。而手機的“非運
發表于 07-30 14:17
?6872次閱讀
valgrind檢測內存問題的原理
valgrind 是一個提供了一些 debug 和優化的工具的工具箱,可以使得你的程序減少內存泄漏或者錯誤訪問。valgrind 默認使用 memcheck 去檢查內存問題。memch
評論