使用Valgrind追踪内存泄漏

根据Valgrind的说法,我的程序中存在相当大的内存泄漏,但实际上我认为情况并非如此。也许我只是不知道什么。我是第一次使用Valgrind,所以我可能会误解它,或者可能会太认真。

无论如何,Valgrind告诉我〜13 MB(直接56个字节,其余为间接字节)肯定丢失了。有问题的代码如下所示:

Node* newRoot = malloc(sizeof(Node));
newRoot->children[0] = tree->root;
newRoot->children[1] = otherNode;
newRoot->k = 2;

tree->root = newRoot;

您可能会说,我有一个树结构,其中树对象有一个根,一个Node有多个孩子。在代码的这一部分中,树被扩展到顶部。旧根成为新节点的子节点,新节点随后成为新根。treeTree*root成员是Node指针,并且children是Node指针的数组。

现在,Valgrind告诉我,上面分配的内存malloc丢失了,但是据我理解,我指的是新根目录下的内存块,而旧根目录则保留为新根目录的子级。

在程序结束时,我将以递归方式释放树中所有节点的内存(通过从处开始递归地下降到所有子节点中root),因此,我很确定内存最终会被释放。

我想念什么吗?有没有办法从Valgrind获得更详细的信息,以查明到底是什么(没有)发生了什么?

基里尔·基洛夫(Kirill Kirov)

什么valgrindmemcheck(默认工具)基本上不用于监视内存泄漏是-监控每个内存分配和是否已分配的内存被释放后。如果未释放,它将显示分配的位置,因为它无法显示应释放的位置。

我的意思是-即使分配/添加功能看起来不错,我们/您也应该看看释放功能。根据问题中的信息,很可能问题就在那里。

另一件事可能有用:您如何运行valgrind我使用以下选项:

valgrind --trace-children=yes --track-fds=yes --log-fd=2 --error-limit=no \
         --leak-check=full --show-possibly-lost=yes --track-origins=yes \
         --show-reachable=yes executable executable_arguments_if_any

有时,该verbose功能也可能有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Valgrind追踪内存泄漏

来自分类Dev

使用valgrind分析的c ++ char内存泄漏

来自分类Dev

内存泄漏C -Valgrind

来自分类Dev

内存泄漏 Valgrind

来自分类Dev

Valgrind内存泄漏检测

来自分类Dev

在malloc上的Valgrind内存泄漏

来自分类Dev

在strdup中的Valgrind内存泄漏

来自分类Dev

内存泄漏(Valgrind报告)(C ++)

来自分类Dev

valgrind如何计算示例内存泄漏?

来自分类Dev

C ++继承和valgrind内存泄漏

来自分类Dev

Valgrind报告QThread :: start()上的内存泄漏

来自分类Dev

sbrk-Valgrind不报告内存泄漏

来自分类Dev

解决valgrind“可能丢失”的内存泄漏

来自分类Dev

解决valgrind“可能丢失”的内存泄漏

来自分类Dev

glewInit()根据valgrind导致内存泄漏

来自分类Dev

Valgrind中的内存泄漏和错误

来自分类Dev

Valgrind内存泄漏错误的文件跟踪

来自分类Dev

valgrind如何计算我的示例内存泄漏?

来自分类Dev

C++ 内存泄漏,Valgrind 消息误导?

来自分类Dev

valgrind标识的内存泄漏,涉及使用malloc返回通过std :: string返回的字符串

来自分类Dev

Valgrind使用适当的free()和end()后,显示ncurses命令的内存泄漏

来自分类Dev

通过 docker-compose 调用时如何使用 valgrind 检查 docker 的内存泄漏

来自分类Dev

尽管内存已被释放,Valgrind仍检测到内存泄漏

来自分类Dev

使用MPMoviePlayerController的内存泄漏

来自分类Dev

使用ksocket的内存泄漏

来自分类Dev

使用MPMoviePlayerController的内存泄漏

来自分类Dev

使用Delphi的内存泄漏

来自分类Dev

Valgrind在std :: map中带有std :: string的内存泄漏

来自分类Dev

如何在脚本中获取valgrind是否发现内存泄漏?

Related 相关文章

热门标签

归档