C++内存泄漏分析

发布时间:2026/11/3 1:14:40
C++内存泄漏分析
  • vld vld_vs2019 vld_doc download gui DR

常用命令

  • sudo apt-get install valgrind
  • sudo apt-get install subversion && svn co svn://svn.valgrind.org/valgrind/trunk valgrind
  • gcc test.c -g -o test #运行后,生成.out
  • valgrind --suppressions=valgrind/runTest.sup --leak-check=full ./bin/runTest
  • valgrind --leak-check=full --show-reachable=yes --trace-children=yes ./bin/runTest
  • killall memcheck #守护进程泄漏检测
  • killall callgrind #守护进程代码覆盖和性能瓶颈检测
  • valgrind --tool=Memcheck(默认),callgrind,Addrcheck,Cachegrind,Helgrind(多线程分析),Massif(堆分析),DHAT,BBV ./bin/runTest #生成callgrind.out.pid
  • callgrind_annotate --auto=yes callgrind.out.23202 >log #查看callgrind结果
  • valgrind --tool=memcheck ls -l #命令内存检查
  • –vgdb=yes,full --vgdb-error=0 --vgdb-stop-at=startup,exit,abexit,valgrindabexit #valgrind下gdb调试
  • –log-file= #输出日志
  • –run-cxx-freeres= #C++检测
  • gdb prog && target remote | vgdb #开始gdb调试后,另shell远程gdb调试

示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f(void)
{
int* x = malloc(10 * sizeof(int));
x[10] = 0; // problem 1: heap block overrun
} // problem 2: memory leak – x not freed

void func() {
printf(“func call”);
func();
}

int main(int, int**) {
f();
//func();
printf(“hello\n”);
char *ptr = malloc(10);
ptr[12] = ‘a’;// 内存越界
memcpy(ptr+1, ptr, 5);// 踩内存
char a[10];
a[12] = ‘i’;// 数组越界
free(ptr);
free(ptr);// 重复释放
char *p1;
*p1 = ‘1’;// 非法指针
}

创作不易,小小的支持一下吧!