gpt4 book ai didi

c - Valgrind 和全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:37 24 4
gpt4 key购买 nike

我正在运行 valgrind 来查找内存泄漏。我在主函数中分配了两个全局变量;然后,在 main 的末尾,我释放了两者,但 Valgrind 一直在写:

==18311== 16 bytes in 1 blocks are definitely lost in loss record 1 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A30C: main (application.c:730)
==18311==
==18311== 16 bytes in 1 blocks are definitely lost in loss record 2 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A31D: main (application.c:731)

泄漏摘要:

==18311== LEAK SUMMARY:
==18311== definitely lost: 32 bytes in 2 blocks
==18311== indirectly lost: 0 bytes in 0 blocks
==18311== possibly lost: 0 bytes in 0 blocks
==18311== still reachable: 0 bytes in 0 blocks
==18311== suppressed: 0 bytes in 0 blocks

为什么我不能释放这两个变量?

编辑

someList *something; *something_else;

使用的结构有两个char * 类型的字段和一个someList *next 字段。后面有很多代码。一些线程将使用这两个变量添加/编辑/删除对象。

something -> object 1 -> ... -> object n
something_else -> object 1 -> ... -> object m

其中->表示something->next = object 1object k都是someList的实例*

在应用程序接近尾声时,我释放了每个 object k 元素的每个字段。然后,在最后一部分:

free(something);
free(something_else);

可能是我忘记释放一个对象的字段。这会导致我现在的行为吗?

我希望现在更清楚了。

最佳答案

您确定要释放所有变量吗? Valgrind 说你不是。

尝试使您的代码精简并在此处发布,或者运行更多调试。

关于c - Valgrind 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768080/

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