转载时请注明出处和作者联系方式:http:///mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
这里记录一下使用valgrind查找你的应用程序中的各种潜在的错误信息,并举例说明。
经常使用valgrind查找一下你的代码的内存有关错误,对移植到嵌入系统后的系统稳定性来说有着重要的意义。
usage
- x86 平台
- 先编译你自己的应用程序
- 命令行:
- valgrind --log-file=1 --tool=memcheck ./a.out
error specification
一、有malloc,但未free
- code
#include <stdio.h>
#include <stdlib.h>
void main()
{
char *p = malloc(20);
sprintf(p, "%s", "test");
fprintf(stderr, "p:%s/n", p);
}
- 分析:
- 文件后部,总体来看,有确定无疑的lost 20字节。如下:
==26512== LEAK SUMMARY:
==26512== definitely lost: 20 bytes in 1 blocks.
- 在文件之前描述的内容,细节可以看出,有1个malloc,但未去free。如下:
==26512== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
==26512== malloc/free: in use at exit: 20 bytes in 1 blocks.
==26512== malloc/free: 1 allocs, 0 frees, 20 bytes allocated.
二、free一个未malloc的指针
三、stack中,无效的读取,不会提示出错
四、heap堆中,无效的读取,会提示出错
五、stack上的,无效的写
六、heap堆上,无效的写