centos Valgrind显示内存泄漏,但没有发生内存分配

dzjeubhm  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(193)

这是一个相当简单的问题。
在我的学校里,我们使用一个远程CentOS服务器来编译和测试我们的程序。由于某种原因,尽管没有使用malloc,valgrind总是显示4096B泄漏。这里有人知道这个问题可能是从哪里来的吗?

bwleehnv

bwleehnv1#

你的程序调用printf。这个库可能会为自己的使用分配内存。更一般地说,根据OS/libc/...,可能会为启动一个程序分配不同的内存。
还请注意,在本例中,您会看到在退出时仍有一个块被分配,并且该块是抑制计数的一部分。这意味着valgrind抑制文件已经确保该内存不会出现在要检查的泄漏列表中。
总之:没问题。
在任何情况下,当您怀疑存在泄漏时,您都可以查看泄漏的详细信息(例如,它们的分配堆栈跟踪),以查看这些泄漏是否由您的应用程序触发。

8aqjt8rx

8aqjt8rx2#

除了@phd的回答,你还可以做几件事来更清楚地看到发生了什么。
如果您使用-s-v运行Valgrind,它将显示所用抑制的详细信息。
你可以使用--trace-malloc=yes来查看所有对分配函数的调用(只对小型应用程序这样做)。类似地,你可以使用--default-suppressions=no来运行,然后你会看到内存的细节(在本例中使用--leak-check=full --show-reachable=yes
最后,您使用的是旧的Centos / GNU libc吗?几年前,Valgrind提供了一种机制来清理io缓冲区之类的东西,所以您不应该在最近的Valgrind和Linux + libc中收到这类消息。

相关问题