J'ai une fonction qui prend un pointeur sur un char * ** et le remplit de chaînes (une gamme de cordes je suppose). * list_of_strings * est une mémoire allouée à l'intérieur de la fonction. Comment allez-vous libérer la mémoire après avoir utilisé les cordes? Si j'appelle p> ne sera-t-il pas que libérer les pointeurs et non la mémoire que chaque chaîne elle-même utilisait? Comment puis-je libérer complètement la mémoire p> juste pour clarté que la fonction ressemble à ceci: p>
4 Réponses :
Oui, vous devez Seulement vous savez qu'il existe une structure semblable à une arbre qui pourrait être libérée de récursivitée, que la connaissance n'est nulle part dans le tas d'exécution C. Le gestionnaire de démarrage n'a donc aucune idée de cela et votre programme doit tout libérer. p> gratuit () code> chaque bloc que vous avez obtenu à partir de
MALLOC () code>. Vous le faites en parcourant la gamme de pointeurs et de Calage
gratuit () code> sur chaque élément et libérant uniquement le tableau lui-même. P>
ne sera pas que libérer les pointeurs et non la mémoire que chaque chaîne elle-même utilisait? P>
Oui, en effet. P>
Comment puis-je complètement libérer la mémoire p> blockQuote>
en boucle via la matrice et libérant chaque chaîne une par une avant em> libérant le tableau lui-même. E.g. P>
xxx pré> blockQuote>
Vous devez itérer sur list code> et appelez
gratuit () code> sur chaque membre de la matrice. Alors libérez le tableau. P>
Fondamentalement, il y a une règle générale pour allouer et libérer: vous devez appeler autant de libres () que vous appelez MALLOC (). C'est aussi simple que ça. Dans tous les autres cas, vous avez une fuite de mémoire. P>
Vous avez une fuite de mémoire:
* (liste + i) = quelque_string_from_somewhere code> écrase le pointeur obtenu à partir de MALLOC.
C'est un bon point. Vous devez utiliser quelque chose comme Strcpy / Strncpy / Autre alternative à la copie de la chaîne. Personnellement, je recommanderais d'utiliser quelque chose comme Snprintf si, sans autre raison que cela ne vous oblige à évaluer vos hypothèses.