Bonjour!
Je dois faire un programme pour manipuler des automates.
Dans mon main(), je déclare un automate ainsi:
Automate* auto = malloc(blabla..);
Si je voulais libérer l'espace mémoire alloué pour cet automate dans mon programme principal, si j'ai bien tout compris, j'écrirais:
free(auto);
Mais là, il m'est demandé de créer une procédure de suppression d'un automate qui prend la référence à cet automate en paramètre, et donc, en clair, une procédure dont la signature est:
void suppression_automate (Automate** automate);
(et à un moment donné du corps de la fonction, après avoir libéré les différents composants de l'automate, je dois écrire: free(automate); )
Je ne comprends pas pourquoi je passe un pointeur du pointeur.
Je suis d'accord que dans une procédure où je devrais allouer la mémoire, comme par exemple:
void initialiser_automate(Automate** automate);
J'aurais: *automate= malloc(blabla);
parce que pour affecter de la mémoire au pointeur, et ne pas perdre cette information une fois la procédure terminée, il faut le passer par adresse.
Mais c'est le même principe pour free()?
Peut-être que c'est juste que je ne comprends pas exactement comment fonctionne free(), finalement...
Bref, merci de m'avoir lue, et merci d'avance pour vos éclaircissements!
Partager