天天看點

linux下檢測記憶體洩漏

使用開源工具valgrind

下載下傳請點選,發行版本連結

安裝步驟:

1.解壓檔案  tar -jxvf valgrind-x.x.x.tar.bz2
2.進入檔案目錄  cd  valgrind-x.x.x
3.在目錄下執行 ./configure
4.使用make進行自動化編譯  make
5.安裝 make install           

複制

ubuntu使用者可以使用:

sudo apt-get install valgrind

進行安裝

在C/C++程式中,使用指針雖然是非常高效的,但是伴随而來的一旦使用方法不得當就會造成大量的記憶體碎片。而C++程式對(heap memory)的申請和釋放都由程式員手工完成的。但是在大型程式中,一旦出現記憶體洩漏的問題也難以通過一行一行的邏輯判斷進行查找,這是十分痛苦的。當然智能指針(smart pointer)的出現友善管理堆記憶體,有興趣的朋友們可以下載下傳boost庫的源碼學習智能指針是怎麼管理堆記憶體的以及它的特性,但是今天我們讨論的重點是如何使用開源工具檢測記憶體洩漏。

boost c++庫連結

下面使用valgrind檢測常見的記憶體錯誤,首先對常見的記憶體錯誤進行分類

1.使用野指針

2.重複釋放同一塊記憶體

3.new和delete或malloc和free沒有配對使用,造成記憶體洩漏

4.使用未進行初始化的對記憶體

1.使用野指針

test.cpp
#include <iostream>
using namespace std;

int main(){
	int *pint = new int;//動态申請記憶體
	*pint = 30;
	delete pint;//釋放記憶體
	cout<<*pint<<endl;//使用野指針
	return 0;
}
g++ test.cpp -g -o test
valgrind --tool=memcheck ./test進行檢測           

複制

linux下檢測記憶體洩漏

2.重複釋放記憶體

#include <iostream>
using namespace std;

int main(){
	int* pint = new int;
	delete pint;
	delete pint;
	return 0;
}
g++ test.cpp -g -o test
valgrind --tool=memcheck ./test進行檢測           

複制

linux下檢測記憶體洩漏

3.new和delete或malloc和free沒有配對使用,造成記憶體洩漏

test.cpp
#include <iostream>
using namespace std;
int main(){
	int* pint = new int;
	*pint = 30;
	return 0;
}
g++ test.cpp -o test -g
valgrind --tool=memcheck ./test           

複制

linux下檢測記憶體洩漏

4.使用未進行初始化的對記憶體

linux下檢測記憶體洩漏