C/C++内存检测工具valgrind
valgrind是什么
用來檢測C/C++程序中出現(xiàn)的內(nèi)存問題
所有對(duì)內(nèi)存的讀寫將會(huì)被檢測
malloc() free() new() delete()
這些函數(shù)的調(diào)用都會(huì)被捕獲
相關(guān)檢測的內(nèi)容
1.讀寫未初始化或已經(jīng)釋放的內(nèi)存
2.讀寫范圍超出動(dòng)態(tài)分配的上限
3.數(shù)組越界
4.內(nèi)存泄漏
5.非法的讀寫
6.malloc/free 或 new/delete 不匹配
7.拷貝內(nèi)存時(shí)發(fā)生數(shù)據(jù)覆蓋
使用方法
在編譯程序的時(shí)候 打開調(diào)試模式(-g)顯示行號(hào)
編譯時(shí)關(guān)閉O1/O2等優(yōu)化選項(xiàng)
檢查C++程序時(shí) 可以加上選項(xiàng) -fno-inline
gcc -g XXX.c -o XXX
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt XXX
(XXX是可執(zhí)行文件的名字)
執(zhí)行 valgrind 命令后 會(huì)把相關(guān)日志寫入 log.txt 文件內(nèi)
演示
錯(cuò)誤代碼
#include<stdlib.h>int main(void) {int* a = malloc(520*sizeof(int));a[520] = 1314;//數(shù)組下標(biāo)越界 且 內(nèi)存沒有被釋放return 0; }編譯 執(zhí)行valgrind過程?
日志結(jié)果
分析原因
1.Invalid write of size 4
????????4字節(jié)大小內(nèi)存的非法寫入 對(duì)應(yīng)a[520]=1314 數(shù)組越界
2.LEAK SUMMAYR 2080 bytes
????????內(nèi)存泄漏2080字節(jié) 對(duì)應(yīng)分配了520個(gè)int大小(520*4)的內(nèi)存空間卻沒有釋放
總結(jié)
以上是生活随笔為你收集整理的C/C++内存检测工具valgrind的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内存测试工具memtest,内
- 下一篇: springmvc+mybatis 无