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
Vous pourriez
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
Vous devez vous connecter pour publier un commentaire.
Le problème est que
(*array)++
ne vous donne pas la prochaine pointeur alloué, donc vous ne pouvez pas libre. Gratuitement votre routine doit être:Ou, de même,
OriginalL'auteur lurker
Cette ligne est fausse.
Vous avez besoin.
OriginalL'auteur R Sahu
J'ai essayé ce code et cela fonctionne, peut-être que cela vous aide.
Edit: je suis désolé pour oublier les compter. Normalement le code est ci-dessus.
count
utilisé?OriginalL'auteur echoloji