【发布时间】:2012-04-26 11:34:03
【问题描述】:
我用以下一段 C 代码引入了内存错误:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
int i;
int *a = (int *)malloc(sizeof(int) * 10);
if (!a) return -1; /*malloc failed*/
for (i = 0; i < 11; i++){
a[i] = i;
}
for (i = 0; i < 11; i++){
printf("a[%d] = %d\n",i ,a[i] );
}
// free(a);
return 0;
}
memcheck 检测到 Invalid read/write 和肯定丢失的错误,这是正确的和预期的。
现在,我将同一段代码添加到我的应用程序的共享对象文件 (.so) 中。此应用程序作为服务运行,并且是一个守护进程。它永远不会退出。我将 valgrind 应用于我的应用程序并调用了修改后的 '.so'。
Memcheck 检测到无效的读/写错误,但虽然所有这些错误都在一种方法中,但不一定会丢失。我可以帮助我让 memcheck 检测内存泄漏(肯定丢失)错误吗?
提前致谢, 光伏
【问题讨论】:
-
您是否在抱怨 Valgrind 没有检测到仍在运行的应用程序中的内存泄漏?据我所知,Valgrind 在进程退出之前无法检测到内存泄漏 - 换句话说,您必须在报告错误之前停止守护进程。