gpt4 book ai didi

c - valgrind (memcheck) 工具没有检测到内存泄漏

转载 作者:行者123 更新时间:2023-12-02 08:48:44 25 4
gpt4 key购买 nike

我用以下 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 and definitely lost,这是正确的,也是预期的。

现在,我将同一段代码添加到我的应用程序的共享对象文件 (.so) 中。此应用程序作为服务运行,是一个守护进程。它永远不会退出。我将 valgrind 应用于我的应用程序并调用了修改后的 '.so'。

Memcheck 检测到 Invalid read/write 错误,但并非绝对丢失,尽管所有这些错误都在一个方法中。我可以得到一些帮助使 memcheck 检测到内存泄漏(肯定丢失)错误吗?

提前致谢,光伏

最佳答案

valgrind 如何知道您丢失了分配的内存?它可以在程序结束时看到内存没有被释放,但这是它能为你做的一切。如果程序永远不会退出,valgrind 认为您可能仍想稍后释放它。

即使 valgrind 会检查所有变量并尝试检测没有​​人指向分配内存的开头:以某种修改形式存储地址是完全合法的;例如,到真正开头之后的字节(想想 Pascal 字符串)。因此 valgrind 无法检测您的代码是否仍然知道分配的内存。因此 valgrind 甚至无法以这种方式帮助您。

关于c - valgrind (memcheck) 工具没有检测到内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10332561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com