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 : 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;
}
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.