我释放了一个我制作的指针,但 Valgrind 仍然报告我丢失了字节,所以我不确定如何处理它。
有问题的代码是:
listNode* temp = (listNode*)malloc(sizeof(listNode));
node = list->head;
while (node != NULL)
{
temp = node->next;
free(node->entry);
free(node);
node = temp;
}
free(temp);
使用瓦尔格林德输出:
16 bytes in 1 blocks are definitely lost in loss record 13 of 21
==2137== at 0xB823: malloc (vg_replace_malloc.c:266)
==2137== by 0x100001B1E: freeList (main.c:110)
==2137== by 0x100001CB5: main (main.c:157)
除非node == NULL
,否则您不会free
给定代码中分配malloc
的内存。您分配一个内存块,将其分配给temp
,然后在循环中继续重新分配给其他temp
地址,从而丢失了您分配的内存 malloc
.
看起来你根本不需要malloc
:你只是使用temp
作为临时指针:为什么需要为它分配内存?
看起来您想遍历节点列表,随时释放各种链接。 看起来 listNode 结构包含两个成员,一个条目具有指向节点信息的指针,下一个成员指向列表中的下一个节点。 最后,您拥有了列表节点本身,它也需要释放。
假设列表的末尾由下一个为 NULL 表示,我将采取的方法如下:
listNode *nodeCur, *nodeNext ;
nodeCur= list->head;
while (nodeCur)
{
nodeNext = nodeCur->next;
free(nodeCur->entry);
free(nodeCur);
nodeCur = nodeNext;
}
下一个问题是变量列表是什么。 作为删除名单的一部分,是否还需要释放它?