gpt4 book ai didi

c++ - valgrind 如何以及何时检测内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:44 24 4
gpt4 key购买 nike

我的代码中存在内存泄漏。堆随着流的触发而不断增加。在我的代码中,我有一个 while(1) 循环,它基本上在队列中等待。当从 web 服务触发该流时,传入的消息被插入队列,并调用 c++ 中的一个方法,该方法接收消息并实现图形形式的流。

对于每个触发器,我发现堆中的内存增加了 604kb。我需要解决这个问题。

我停止了服务[在产品中运行的二进制文件]。

我用 valgrind 启动了服务[将二进制文件作为 valgrind 的输入]

valgrind  --log-file=/home/valgrind-output.txt --leak-check=full <service binary>

但是当二进制文件运行时它没有显示任何泄漏,只有当我停止服务时我才看到一些泄漏。但这些是一次性泄漏,一旦我们重新启动服务就会被清除。[二进制]。

当每个流程被触发时,我有意在流程开始时添加了一个分配。

 int *p = new int[10];

并且还添加了一个日志。我每次触发流程时都会看到日志打印。但是我没有看到 valgrind 在输出文件中有任何泄漏。

如何检查每个流调用之间的泄漏?valgrind 是否仅在调用 main 结束时才处理泄漏?在这种情况下,如何动态检查我的代码导致的泄漏。如果我需要安装任何其他检测器?请建议。这将有很大帮助。谢谢。

最佳答案

valgrind 仅在程序退出时检查内存泄漏。那时它会跟踪所有可从堆栈和全局变量访问的内存,任何无法访问的内容都被认为是泄漏。

如果你想在一个长时间运行的程序中找到泄漏,你需要插入一个退出调用(中止程序),它会在程序运行一段时间后的某个时间发生,它会告诉你当时泄漏了什么点。

关于c++ - valgrind 如何以及何时检测内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15152029/

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