C – Comment puis-je libérer de la mémoire allouée dynamicment?

Jetez un coup d’œil à cette pièce de code, elle fait partie d’une liste chaînée.

int main() { List* head1 = NULL; insertFront(&head1, 1); insertFront(&head1, 2); print(head1); free(head1); return 0; } 

une autre fonction est:

 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 } 

Mes questions sont:

  1. Est-ce que mon code va causer un problème de fuite de mémoire?

  2. Devrais-je avoir besoin de libérer (dynamicment) la mémoire allouée pour le noeud (qui est à l’intérieur d’une fonction)?

  3. Si je libère head1, la mémoire allouée au noeud sera-t-elle également libérée? Si oui, alors comment?

Vous avez une fuite de mémoire car vous ne libérez que le premier nœud de la liste. Vous ne voulez pas free dans la fonction insertNode , sinon vous gaspillez immédiatement la mémoire que vous venez d’allouer.

À la fin de votre programme, vous devez parcourir la liste et free chaque élément.

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