Освобождение памяти - PullRequest
       25

Освобождение памяти

1 голос
/ 18 октября 2011

В настоящее время я пишу связанный список и пытаюсь освободить память при удалении узла. Однако, после нескольких часов попыток сделать это, я не могу получить чистый вывод 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 ]

3 голосов
/ 18 октября 2011

Вау, ваш malloc неверен.У вас есть:

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

Что вам нужно:

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

В исходном коде вы выделяете достаточно только для указателя.Но вы пытаетесь выделить объект Node.

1 голос
/ 18 октября 2011
node = malloc(sizeof(*node));

Выделите место для вещи, на которую указывает node.

Не приводите возвращаемое значение malloc. Это может маскировать ошибку до #include <stdlib.h>.

0 голосов
/ 18 октября 2011

Кажется правильным. Или есть утечки в других местах? Или вы освобождаете сам элемент как передаваемый параметр?

...