Je cours dans un double gratuit, et je ne peux pas voir où cela se passe. L'objectif du code suivant est de supprimer des nœuds Person d'une liste liée.C Double Gratuit Problème
typedef struct person {
char *first ;
char *last ;
char *location ;
struct person *next_person ;
} person ;
struct person_list {
int num_persons ;
person *first_person ;
} person_list ;
extern struct person_list person_list ;
void free_person(person *person) {
free(person->first);
person->first = NULL;
free(person->last);
person->last = NULL;
free(person->location);
person->location = NULL;
free(person);
person = NULL;
}
...
if (person_list.num_persons > 0) {
while (person_list.num_persons > 0) {
//Iterate to the end of the chain.
cur_person = person_list.first_person;
while (cur_person->next_person != NULL) {
cur_person = cur_person->next_person;
}
free_person(cur_person);
person_list.num_persons--;
}
}
...
Mais free_person définit cette personne sur NULL. Pourquoi ça ne marche pas? – Mike
Comme l'écrit pmg, il ne définit que la copie locale dans la fonction. Vous devrez le définir sur NULL en dehors de la fonction, ou passer une référence (qui est une fonctionnalité C++, pas C). – Wolf
Cela a du sens. Je vous remercie! – Mike