Я использую valgrind для поиска утечек памяти.Я выделил две глобальные переменные в основной функции;затем, в конце main
я освобождаю оба, но Вальгринд продолжает писать:
==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
Почему я не могу освободить эти две переменные?1008 *
Редактировать
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);
Возможно, я забыл освободить поле объекта.Может ли это привести к тому, что у меня здесь такое поведение?
Надеюсь, теперь все понятнее.