c - Valgrind 和全局变量

标签 c memory-leaks valgrind

我正在运行 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/

相关文章:

c++ - 安装 pHash 库时对 `fftw_init_threads' 的 undefined reference

linux - 如何发现进程的内存泄漏?

c - 如果我不执行 memset,则未初始化的值是由堆分配创建的

PHP 5.3.5 PDO FETCH_OBJ 内存泄漏?

c++ - valgrind 中的一些错误

linux/proc/<pid>/exe & valgrind

c - 函数声明与原型(prototype)的替代 (K&R) C 语法

c++ - C/C++ 中的 GNU Octave 代码等效项

c - K&R 中的练习 1-24 - 基本语法检查

c++ - C++问题新删除