c - 内存分配释放

标签 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 函数中,我想取出列表的头部,并使头部的下一个节点成为新的头部。我想解除分配给头部的内存。

感谢您的帮助

最佳答案

哇,你的 malloc 不正确。你有:

(struct Node *)malloc(sizeof(node));

你需要的是:

(struct Node *)malloc(sizeof(struct Node));

在您的原始代码中,您只为指针分配了足够的空间。但是您正在尝试分配一个 Node 对象。

关于c - 内存分配释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801401/

相关文章:

c - 错误: too many arguments to function

c - Scanf 似乎工作不正常,或者我做错了什么

c - 如何修改已传递给 C 函数的指针?

java - 如何将链表 append 到链表的特定节点?

c - 在c中将文本文件逐行保存到链表中

c - 我无法将元素添加到 C 中链接列表的末尾

c - 你如何找到地址和数据总线的大小

c - 我如何停止阻塞?

c# - 在 C# 中的等效结构之间高效转换

c++ - 为什么我定义的返回指向另一个函数的指针的函数不起作用?