C - 指针被释放,但瓦尔格林德说它不是



我释放了一个我制作的指针,但 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;
}

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

相关内容

  • 没有找到相关文章

最新更新