C libre et struct
Ma question est sur C gratuit() la fonction de désallocation des blocs de mémoire précédemment allouée avec malloc().
Si j'ai un struct type de données composé de plusieurs pointeurs, chacun d'eux pointant vers différents emplacements de mémoire, ce qui allait arriver à ces emplacements de mémoire si je demande à free() sur la structure? va que les emplacements d'être libre aussi? ou tout simplement le bloc de mémoire qui allouent le pointeur?
source d'informationauteur Leandro Galluppi
Vous devez vous connecter pour publier un commentaire.
Pas. Ils ne seront pas libérés. Vous devez les libérer "manuellement". Le malloc ne sait rien sur le contenu de votre structure (il ne sait pas qu'il est une structure à tous, c'est juste un "morceau de la mémoire" de son point de vue).
Si vous n'gratuit de la structure, de la mémoire pointée par les pointeurs à l'intérieur de la structure ne sera pas libéré (en supposant que c'était mallocd). Vous devez libérer d'abord.
Vous pouvez utiliser valgrind (si disponible) pour voir par vous-même:
Si vous utilisez
free(rootNode)
il ne sera libéré que le souvenir de ce nœud unique. En d'autres termes, vous aurez un tas de mémoire allouée que vous ne serez pas en mesure de le libérer, à moins que vous gratuit il avant de libérer la mémoire utilisée par le nœud que vous souhaitez supprimer.Juste pour préciser sur @Chrono Kitsune de la réponse, il faudrait toujours être possible de libérer les pointeurs à l'intérieur de la structure, mais c'est risqué.
Ce
free(rootNode)
n'est en fait dire à la mémoire de l'unité de gestion de l'espace mémoire qui a été utilisée parrootNode
n'est pas utilisé plus et le jeu juste pour quoi que ce soit d'autre qui en a besoin. Cependant,rootNode
pointe toujours vers le même emplacement, il est maintenant considéré comme un pointeur non valide, et son contenu ne peut en corrompu en raison de sa position peut maintenant être remplacé par d'autres choses.Si vous essayez d'accéder à
rootNode
droite après la libération, travail, mais il n'y a pas de garantie, de sorte qu'il est plus sûr d'free
son contenu (qui ont étémalloc
'd) avant deleteingrootNode
lui-même.