1

我释放了我创建的指针,但 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)
4

2 回答 2

5

您不会free在给定的代码中分配内存malloc,除非node == NULL. 您分配一块内存,将其分配给temp,然后继续循环以重新分配给temp其他地址,从而丢失您分配给 的内存malloc

看起来您根本不需要malloc:您只是temp用作临时指针:为什么需要为它分配内存?

于 2012-09-14T15:21:41.967 回答
0

看起来您想要遍历节点列表以释放各种链接。listNode 结构似乎包含两个成员,entry 具有指向节点信息的指针,next 指向列表中的下一个节点。最后你有 listNode 本身,它也需要被释放。

假设列表的末尾由 next 表示为 NULL,我将采取的方法如下:

listNode *nodeCur, *nodeNext ;

nodeCur= list->head;
while (nodeCur)
{
    nodeNext = nodeCur->next;
    free(nodeCur->entry);
    free(nodeCur);
    nodeCur = nodeNext;
}

下一个问题是什么是变量列表。作为删除列表的一部分,它是否也需要被释放?

于 2012-09-14T15:34:14.437 回答