我正在运行 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 1
,object k
都是someList的实例*
。
在应用程序接近尾声时,我释放了每个 object k
元素的每个字段。然后,在最后一部分:
free(something);
free(something_else);
可能是我忘记释放一个对象的字段。这会导致我现在的行为吗?
我希望现在更清楚了。
最佳答案
您确定要释放所有变量吗? Valgrind 说你不是。
尝试使您的代码精简并在此处发布,或者运行更多调试。
关于c - Valgrind 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768080/