我释放了一个我做的指针,但是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);
使用valgrind输出:
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)
答案 0 :(得分:5)
除非free
,否则您没有malloc
在给定代码中使用node == NULL
分配的内存。您分配一块内存,将其分配给temp
,然后继续循环以重新分配给temp
其他地址,丢失您使用malloc
分配的内存。
看起来你根本不需要malloc
:你只是使用temp
作为临时指针:你为什么需要为它分配内存?
答案 1 :(得分:0)
看起来你想要走节点列表,随时释放各种链接。似乎listNode结构包含两个成员,条目具有指向节点信息的指针,然后指向列表中的下一个节点。最后你有listNode本身也需要被释放。
假设列表的末尾由next表示为NULL,我将采用的方法如下:
listNode *nodeCur, *nodeNext ;
nodeCur= list->head;
while (nodeCur)
{
nodeNext = nodeCur->next;
free(nodeCur->entry);
free(nodeCur);
nodeCur = nodeNext;
}
接下来的问题是什么是变量列表。它是否也需要作为删除列表的一部分而被释放?