C: Comment libérer des nœuds dans la liste chaînée?
Comment vais-je gratuit les nœuds affectés dans une autre fonction?
struct node {
int data;
struct node* next;
};
struct node* buildList()
{
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
head = malloc(sizeof(struct node));
second = malloc(sizeof(struct node));
third = malloc(sizeof(struct node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
return head;
}
J'appelle la fonction buildList dans le main()
int main()
{
struct node* h = buildList();
printf("The second element is %d\n", h->next->data);
return 0;
}
Je veux gratuit de tête, deuxième et troisième variables.
Merci.
Mise à jour:
int main()
{
struct node* h = buildList();
printf("The element is %d\n", h->next->data); //prints 2
//free(h->next->next);
//free(h->next);
free(h);
//struct node* h1 = buildList();
printf("The element is %d\n", h->next->data); //print 2 ?? why?
return 0;
}
Les deux copies 2. Ne devrait pas appeler free(h) retirer h. Si oui, pourquoi est-ce que h->next->données disponibles, si h est libre. Bien sûr, la "seconde" nœud n'est pas libéré. Mais puisque la tête est enlevée, il devrait être en mesure de faire référence à l'élément suivant. Ce qui est ici l'erreur?
source d'informationauteur 53E3916A
Vous devez vous connecter pour publier un commentaire.
Un processus itératif en fonction de votre liste:
Ce que la fonction est en train de faire est de le suivre:
vérifier si
head
est NULLE, si oui la liste est vide et nous avons juste retourEnregistrer le
head
dans untmp
variable, et de fairehead
point vers le nœud suivant de votre liste (ce qui est fait danshead = head->next
free(tmp)
variable, ethead
juste des points pour le reste de la liste, passez à l'étape 1Simplement par une itération sur la liste:
Vous pouvez toujours le faire de manière récursive comme suit:
D'une fonction peut faire le travail,