2011-10-18 23 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>にマスクすることができます。

関連する問題