Problème de libération de mémoire après des realloc
Bonjour,
Je réalise un programme dans lequel je dois allouer dynamiquement de la mémoire, mais j'ai un souci lorsque je dois libérer celle-ci.
Je ne poste pas l'intégralité du programme, car il est vraiment trop long, mais un exemple qui me renvoie exactement la même erreur.
Le but ici est de lire les arguments du main
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| int main(int argc, char *argv[]){
char **tab = NULL;
int i;
for(i=0; i<argc-1; i++){
//Allocation du pointeur
tab = (char**)realloc(tab, sizeof(char*));
//Allocation de la chaine
tab[i] = (char*)malloc((strlen(argv[i+1])+1)*sizeof(char));
//Copie
strcpy(tab[i], argv[i+1]);
}
//Affichage des arguments
for(i=0; i<argc-1; i++){
printf("tab[%d] = %s\n",i,tab[i]);
}
//Libération de la mémoire
for(i=0; i<argc-1; i++){
free(tab[i]);
}
free(tab);
return 0;
} |
Ce qui est étrange c'est que tous ce passe bien tant que je n'entre pas plus de 3 arguments. Au delà, j'ai une erreur lors de la libération de la première case de tab du type "double free or corruption (out)".
Il y a quelque chose qui m'échappe, mais comme ça fait presque trois heures que je tourne en rond, je fais appel à votre aide =)
Merci d'avance.