我正在编写链接列表,并在删除节点时尝试释放内存分配。但是,经过几个小时的尝试,我似乎无法获得干净的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函数中我想取出列表的头部并使头部的下一个节点成为新的头部。我想释放给予头部的记忆。
感谢您的帮助
答案 0 :(得分:3)
哇,你的malloc
不正确。你有:
(struct Node *)malloc(sizeof(node));
您需要的是:
(struct Node *)malloc(sizeof(struct Node));
在原始代码中,您只为指针分配足够的内容。但是你正在尝试分配一个Node
对象。
答案 1 :(得分:1)
node = malloc(sizeof(*node));
为node
指向的内容分配空间。
不要转换malloc
的返回值。这样做可以将失败掩盖到#include <stdlib.h>
。
答案 2 :(得分:0)
看来是对的。或者其他地方是否有泄漏?或者你将元素本身释放为传入的参数吗?