2010-09-05 6 views
2

J'essaie d'implémenter des listes liées avec c struct, j'utilise malloc pour allouer un nouveau nœud puis allouer de l'espace pour value, donc j'ai réfléchi à comment libérer la structure une fois que je suis fait avec eux, ma structure ressemble à ceci:Libérer la structure avec des variables pointeur et non-pointeur

typedef struct llist { 
    char *value; 
    int line; 
    struct llist *next; 
} List; 

J'ai une fonction qui marche à travers le struct gratuits et ses membres comme ceci:

free(s->value); 
free(s); 

ma question est, est-ce que également gratuit le int line?

Répondre

3

Oui.

Le int line fait partie de la structure, et est ainsi libéré lorsque vous libérez la structure. La même chose est vraie de char *value. Cependant, cela ne libère pas la mémoire à value points, c'est pourquoi vous devez appeler séparément free pour cela.

1

Oui, c'est le cas. Lorsque vous attribué mémoire pour s il a alloué de mémoire pour ces trois:

pointeur

à un char (valeur)
entier (ligne)
pointeur vers une llist struct (suivant)

Lorsque vous libéré s, tout ce stockage est parti (qui inclut la mémoire pour la ligne).

Questions connexes