Bonjour,

Je tourne en rond, je ne comprends pas pourquoi je n'arrive pas à libérer les espaces mémoires que j'ai alloué.
Je vous explique :

j'ai une strucure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
typedef struct descriptif {
	int intNbChampsCle;//nombre d'indice du tableau de pointeur
	char **chrChampsCle;
};
Je déclare une variable de type structure descriptif et un pointeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
struct descriptif desc_ref,*ptrDesc_ref;
j'affecte à mon pointeur l'adresse de ma variable
je passe à une fonction mon pointeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
F_descriptif(ptrDesc_ref,1);
dont le prototype est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void F_descriptif(struct descriptif *desc,int type)
dans cette fonction j'alloue la mémoire et suivant un compteur je réalloue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
if(desc->chrChampsCle == NULL) {
	if ((desc->chrChampsCle=(char **)calloc( intNbChamp + 1, sizeof (char *))) == NULL) {
	    fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
	    exit (1);
	}
} else {
	if ((desc->chrChampsCle=(char **)realloc(desc->chrChampsCle,sizeof (char *) * (intNbChamp + 1))) == NULL) 	{
		fprintf(stderr,"PROBLEME d'allocation de memoire [desc->chrChampsCle]\n");
		exit (1);
	}
}
puis je récupère à l'indice précisé par le compteur un pointeur sur une chaine via une fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
desc->chrChampsCle[intNbChamp]=ExtractChaine(ptrChrBufferLect,ptrTemp);
ce que fait la fonction :
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
 
char * ExtractChaine(char *debut,char *fin) {
	int intIndice;
	int intLongueur;
	char *ptrChrRetour;
 
	intIndice=0;
	intLongueur=fin-debut;
 
	if ((ptrChrRetour = (char *) calloc(intLongueur+1,T_CHAR)) == NULL)
    {
        fprintf(stderr,"PROBLEME d'allocation de memoire [ptrChrRetour]\n");
        exit (1);
    }
 
	for(intIndice=0;intIndice < intLongueur;intIndice++) {
		ptrChrRetour[intIndice]=debut[intIndice];
	}
	ptrChrRetour[intIndice]='\0';
 
	return ptrChrRetour;
}

à la fin je libère les allocation faites :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
	for(intCompteur=0;intCompteur < desc_ref.intNbChampsCle;intCompteur++) {
		if(desc_ref.chrChampsCle[intCompteur] != NULL) {
			free(desc_ref.chrChampsCle[intCompteur]);
		}
	}
 
	free(desc_ref.chrChampsCle);
La fonction F_descriptif est utilisé 2 fois, la libération pour la 1ère utilisation fonctionne bien mais quand je termine la libération du dernier indice de la seconde utilisation j'ai une erreur :
unhandled exception in monProg.exe : 0xC0000005 Access violation
Merci d'avance pour votre aide.