Bonjour, je n'arrive pas à expliquer la cause de mon segmentation fault.
Voici mon fichier .c
Tout à la fin de mon main, je fais
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; }
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 DestroyDistribution(&d);
Rien de bien sorcier en somme.
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.;
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.
Partager