Bonjour,

j'ai fait un programme en C sous Visual C++ 6.0. Tout se passe bien lors de l'exécution. Lors de la libération de la mémoire j'appelle la fonction suivante :

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
 
void DestroyResultatFit(ResultatFit ** rfit)
{
  if(*rfit != NULL)
  {
    DestroyGRC(&(*rfit)->grc);
    DestroyGIF(&(*rfit)->gif);
    DestroyGSF(&(*rfit)->gsf);
    DestroyPLC(&(*rfit)->plc);
    DestroyGRF(&(*rfit)->grf);
    DestroyDCN(&(*rfit)->dcn);
    DestroyExtrapolation(&(*rfit)->extra);
	DestroyDFLU(&(*rfit)->dflu);
	DestroyCyclesGSFGRCGRF(&(*rfit)->cycles);
	DestroyGIFDELI(&(*rfit)->gifdeli);
	DestroyPLCDELI(&(*rfit)->plcdeli);
    FREE(*rfit);
  }
}
A la sortie de cette fonction, rfit == NULL. Dans le debugger, pas à pas, tous les champs sont bien remis à NULL. Lorsque je sors de cette fonction, rfit->gif (idem pour tous les champs), le debugger m'affiche

gif CXX0030: Error: expression cannot be evaluated
pourquoi ?

Maintenant, lorsque ma fonction "coeur de calcul" est appelée via une DLL (j'ai fait un autre projet qui me crée ma dll et au lieu d'appeler la fonction j'appelle la dll), le programme plante lors de la libération de la mémoire.

Pouvez-vous m'aider s'il vous plait ? Je vous envoie qq structures. Si je comprends pour le champs rfit->gif, je comprendrais pour tout le reste.

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
 
typedef struct
{
  double coeff[GIF_MAX_NBELEM];
  double ted;
  double teg;
  double etr;
  double em;
} GIF;
 
GIF * CreateGIF(double coeff[GIF_MAX_NBELEM],double ted,double teg,double etr,double em)
{
  int i;
  GIF * gif=malloc(sizeof(*gif));
  if(gif == NULL) return NULL;
 
  for(i=0;i<GIF_MAX_NBELEM;i++) gif->coeff[i]=coeff[i];
  gif->ted=ted;
  gif->teg=teg;
  gif->etr=etr;
  gif->em=em;
 
  return gif;
}
 
void DestroyGIF(GIF ** gif)
{
  FREE(*gif);
}
Merci d'avance