La libération de la mémoire qui a été allouée à un tableau de pointeurs de char (chaînes de caractères). Dois-je gratuit chaque chaîne ou tout simplement de la “main” pointeur?

J'ai une fonction qui prend un pointeur vers un char ** et le remplit avec les chaînes de caractères (un tableau de chaînes, je suppose). *list_of_strings* est la mémoire allouée à l'intérieur de la fonction.

char * *list_of_strings = NULL;

/* list_of_strings malloc'd inside function */
fill_strings_with_stuff(&list_of strings);

use_list_for_something(list_of_strings);

/* Now how do I free it all? */

Comment pourrais-je aller sur la manière de libérer la mémoire après que j'ai utilisé les cordes? Si je l'appelle

free(list_of_strings);

ne pas que simplement le réel pointeurs et pas la mémoire de chaque chaîne elle-même a été à l'aide? Comment puis-je complètement libre de la mémoire

Juste pour la clarté de la fonction ressemble à quelque chose comme ceci:

fill_strings_with_stuff(char *** list)
{
    *list = malloc(AMOUNT);

    for (i = 0; i < SOMETHING; i++) {
        *(list + i) = malloc(LINE_LEN);
        *(list + i) = some_string_from_somewhere
    }

    /* ... */

}
  • Vous avez une fuite de mémoire: *(list + i) = some_string_from_somewhere remplace le pointeur obtenu à partir de la fonction malloc.
  • C'est un bon point. Vous devriez utiliser quelque chose comme strcpy/strncpy/d'autre alternative pour copier la chaîne. Personnellement, je vous conseille d'utiliser quelque chose comme snprintf si pour aucune autre raison qu'il vous oblige à évaluer vos hypothèses.
InformationsquelleAutor caesius | 2011-01-19