系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。所以,在实践中会用到很多工具来调试内存问题。
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程序错误的心脏,真可谓是程序员的瑞士军刀。
Valgrind工具包包含多个工具:
这里给大家介绍如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测。memcheck工具主要检查下面的程序错误:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
char c = *p; //使用未初始化的内存
printf("\n [%c]\n",c);
return 0;
}#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p = malloc(1);
*p = ‘a‘;
char c = *p;
printf("\n [%c]\n",c);
free(p);
c = *p;//在内存被释放后进行读/写
return 0;
}#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p = malloc(1);
*p = ‘a‘;
char c = *(p+1); //从已分配内存块的尾部进行读/写
printf("\n [%c]\n",c);
free(p);
return 0;
}#include <stdio.h>
#include <stdlib.h>
//在这次的代码中, 我们申请了一个字节但是没有将它释放
int main(void)
{
char *p = malloc(1);
*p = ‘a‘;
char c = *p;
printf("\n [%c]\n",c);
return 0;
}#include <stdio.h>
#include <stdlib.h>
#include<iostream>
int main(void)
{
char *p = (char*)malloc(1);
*p = ‘a‘;
char c = *p;
printf("\n [%c]\n",c);
delete p;
return 0;
}调试结果如下:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p = (char*)malloc(1);
*p = ‘a‘;
char c = *p;
printf("\n [%c]\n",c);
free(p);
free(p);
return 0;
}本文转自:http://www.oschina.net/translate/valgrind-memcheck。
如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
原文地址:http://blog.csdn.net/tennysonsky/article/details/48657525