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 :
Je déclare une variable de type structure descriptif et un pointeur :
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; };
j'affecte à mon pointeur l'adresse de ma variable
Code : Sélectionner tout - Visualiser dans une fenêtre à part struct descriptif desc_ref,*ptrDesc_ref;
je passe à une fonction mon pointeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part ptrDesc_ref=&desc_ref;
dont le prototype est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part F_descriptif(ptrDesc_ref,1);
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 void F_descriptif(struct descriptif *desc,int type)
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
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); } }
ce que fait la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 desc->chrChampsCle[intNbChamp]=ExtractChaine(ptrChrBufferLect,ptrTemp);
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 :
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 :
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);
Merci d'avance pour votre aide.unhandled exception in monProg.exe : 0xC0000005 Access violation
Partager