Bonjour, je n'arrive pas à expliquer la cause de mon segmentation fault.

Voici mon fichier .c

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
30
31
32
33
34
35
 
#include<stdio.h>
#include<stdlib.h>
 
#include "distribution.h"
 
#define MEMERROR fprintf (stderr,"%s %d : Allocation Memory Error\n", __FILE__,__LINE__)
 
Distribution * CreateEmptyDistribution(void)
{
  Distribution * d=malloc(sizeof(*d));
  if(d==NULL)
  {
    MEMERROR;
    exit(EXIT_FAILURE);
  }
 
  d->name=NULL;
 
  d->param=malloc(sizeof(*d->param));
  if(d->param==NULL)
  {
    MEMERROR;
    exit(EXIT_FAILURE);
  }
 
  return d;
}
 
void DestroyDistribution(Distribution ** d)
{
  free((*d)->name);  (*d)->name=NULL;
  free((*d)->param); (*d)->param=NULL;
  free(*d); *d=NULL;
}
Tout à la fin de mon main, je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
DestroyDistribution(&d);
et c'est à ce niveau qu'il y a mon segmentation fault. Pourquoi ? Dans mon code, je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
d->name=strdup(name);
d->param->eps=0.1;
d->param->delta=1e-9;
d->param->var=1.;
Rien de bien sorcier en somme.
Mais je doute que mon erreur vienne de là. Depuis ce matin, je mets des pointeurs de fonctions un peu partout, mais je n'ai jamais touché à la variable d (ma distribution). Est-ce qu'une erreur de pointeur peut se "déplacer" pour "atterir" à mon DestroyDistribution(&d); ?
Pourtant, je suis quasiment sûr que ma fonction DestroyDistribution est correctement écrite...

Merci de votre aide.