内存分配释放

时间:2011-10-18 01:10:36

标签: c pointers linked-list malloc free

我正在编写链接列表,并在删除节点时尝试释放内存分配。但是,经过几个小时的尝试,我似乎无法获得干净的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函数中我想取出列表的头部并使头部的下一个节点成为新的头部。我想释放给予头部的记忆。

感谢您的帮助

3 个答案:

答案 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)

看来是对的。或者其他地方是否有泄漏?或者你将元素本身释放为传入的参数吗?