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, освободится ли выделенная память для узла? Если да, то как?

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

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

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