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
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)".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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.
Partager