2011-10-18 150 views
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)); 
    .... 
} 

基本上,在弹出的功能我想取出列表的头,使头部的下一个节点的新掌门人。我想释放头部的记忆。

感谢所有帮助

回答

3

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

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

你需要的是:

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

在你的原代码,你只是一个指针分配足够。但是您尝试分配一个Node对象。

0

这似乎是正确的。还是在其他地方有一些泄漏?还是你释放元素本身作为参数传入?

1
node = malloc(sizeof(*node)); 

node指向的对象分配空间。

请勿施放返回值malloc。这样做可以掩盖失败#include <stdlib.h>