Comment libérer un tableau de char-pointeur?

J'utilise cette Méthode pour convertir des valeurs d'une liste dans un tableau pour une utilisation dans un execvp()-Systemcall:

char **list2argarray(struct shellvalue *values, int count)
{
    char **array = (char **)malloc((count + 1) * sizeof(char *));
    int i = 0;

    while (values)
    {
        char *word = values->word;

        array[i] = (char *)malloc(sizeof(word) + 1);
        strcpy(array[i], word);
        values = values->next;
        i++;
    }
    array[i] = NULL;
    return array;
}

Ce qui est un bon moyen de ces Tableaux? Je l'ai essayé avec des choses comme

void freeargpointer(char **array, int count)
{
    int i = 0;

    while (*array)
    {
        free(*array);
        (*array)++;
    }
}

Mais à chaque fois quand j'arrive à la libre-syscall, pendant le débogage, le programme se bloque avec une erreur comme celle-ci:

free(): invalid suivant la taille (rapide): 0x000000000060c180 ****

Dans list2argarray() le programme est d'une allocation de mémoire pour count éléments, mais l'exécution de la boucle jusqu'à ce values est non-NULL --- cela peut être une source d'incohérence et de bug.
Vous pourriez while ( values && (i < count) ) juste pour éviter i hors de portée.

OriginalL'auteur masked_m0nkey | 2014-05-02