最近在寫OpenCV的程式,其中很多是對圖檔的操作,如果記憶體發生洩漏會大大降低程式執行效率。valgrind是一款較好的檢測程式記憶體問題的工具。
安裝valgrind
首先通過以下腳本安裝valgrind,目前最新版本是3.11.0,
curl -O http://valgrind.org/downloads/valgrind-.tar.bz2
tar -xjvf valgrind-.tar.bz2
cd valgrind-
./configure
make
sudo make install
但是在make的過程中出現如下錯誤,
make[2]: *** No rule to make target `/usr/include/mach/mach_vm.defs', needed by `m_mach/mach_vmUser.c'. Stop.
make[1]: *** [install-recursive] Error 1
make: *** [install] Error 2
根據參考的部落格,發現首先需要安裝指令行工具腳本如下,
因為我的Mac是64位,是以需要将./configure改成如下腳本,之後再make,最後安裝sudo make install,
./configure --disable-tls --enable-only64bit --build=amd64-darwin
make
sudo make install
valgrind使用
假設main.cpp包含如下程式,
#include "stdlib.h"
int main(void)
{
int *x = (int *)malloc( * sizeof(int));
x[] = ;
return ;
}
通過如下腳本進行編譯,
之後通過如下腳本進行檢測,發現如下圖有400bytes的記憶體洩露,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISN5MzMyIDN1EzNxMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如果将main.cpp程式改成如下形式,加上釋放記憶體的代碼,發現将沒有記憶體洩露,
#include "stdlib.h"
int main(void)
{
int *x = (int *)malloc( * sizeof(int));
x[] = ;
free(x);
x = NULL;
return ;
}
http://www.thinksaas.cn/group/topic/347310/
http://blog.csdn.net/21aspnet/article/details/8172124