首页 文章

内存分配释放

提问于
浏览
1

我正在编写链接列表,并在删除节点时尝试释放内存分配 . 但是,经过几个小时的尝试,我似乎无法获得干净的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 回答

  • 1

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

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

    你需要的是:

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

    在原始代码中,您只为指针分配足够的内容 . 但是你正在尝试分配一个 Node 对象 .

  • 0
    node = malloc(sizeof(*node));
    

    node 指向的东西分配空间 .

    不要转换 malloc 的返回值 . 这样做可以掩盖 #include <stdlib.h> 的失败 .

  • 3

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

相关问题