2017-01-27 6 views
1

Посмотрите на этот кусок кодов, это часть связанного списка.C - Как я могу освободить динамически выделенную память?

int main() 

{ 
    List* head1 = NULL; 

    insertFront(&head1, 1); 
    insertFront(&head1, 2); 

    print(head1); 

    free(head1); 

    return 0; 
} 

другая функция:

void insertFront(List** head, int value) 

{ 
    List* node = (List*)malloc(sizeof(List)); 
    node->data = value; 
    node->next = NULL; 

    node->next = *head; 
    *head = node; 

    //free(node); essentially I am not freeing node 
} 

Мои вопросы:

  1. мой код будет вызывать проблемы утечки памяти?

  2. Должен ли я освободить выделенную память (динамически) для узла (который находится внутри функции)?

  3. Если я освобожу head1, освободится ли выделенная память для узла? Если да, то как?

+1

Вам не нужно бросание перед 'malloc' –

+1

@EdHeal да, спасибо я прочитал http://stackoverflow.com/questions/605845/do-i-cast-the-result-of -malloc –

ответ

4

У вас есть утечка памяти, потому что вы освобождаете только первый узел в списке. Вы не хотите использовать free в функции insertNode, иначе вы сразу отбрасываете выделенную память.

В конце вашей программы вам необходимо пройти список и free каждого элемента.

while (head1) { 
    List *temp = head1; 
    head1 = head1->next; 
    free(temp); 
} 
+0

Ну, спасибо, у меня есть ответы! –

Смежные вопросы