我目前正在编写一个链表并尝试在删除节点时释放内存分配。但是,经过几个小时的尝试,我似乎无法获得干净的 valgrind 输出。
void * pop(struct List *list)
{
if(list->head == 0){
return 0;
}
struct Node * tempNode = list->head->next;
free(list->head);
list->head = tempNode;
...
}
我通过以下方式分配空间:
addNode(struct List *list, void *element){
struct Node *node;
node = (struct Node *)malloc(sizeof(node));
....
}
基本上,在 pop 函数中,我想取出列表的头部,并使头部的下一个节点成为新的头部。我想解除分配给头部的内存。
感谢您的帮助
最佳答案
哇,你的 malloc
不正确。你有:
(struct Node *)malloc(sizeof(node));
你需要的是:
(struct Node *)malloc(sizeof(struct Node));
在您的原始代码中,您只为指针分配了足够的空间。但是您正在尝试分配一个 Node
对象。
关于c - 内存分配释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801401/