Bonjour.

J’ai une erreur de segmentation en utilisant la fonction free que je ne parviens pas à comprendre.
L’erreur disparaît si je supprime l’instruction free(self->states);
J’ai épuré le code pour ne garder que les éléments liés à l’erreur.

Mon output est précisément
Coucou 1
Coucou 2
Erreur de segmentation (core dumped)

Quelqu’un comprend-t-il mon erreur?

Merci.


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
36
37
38
39
40
41
42
43
44
 
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//#include "fa.h"
 
 
struct fa
{
	struct state *states; //Tableau des états composant l'automate	
};
 
 
struct state
{
	//Chaque état, peut être final et/ou initial
	bool is_initial;
	bool is_final;
};
 
 
void fa_create(struct fa *self, size_t alpha_count, size_t state_count)
{
	self = malloc(sizeof(struct fa*));
	self->states = calloc(state_count, sizeof(struct state*));	
}
 
 
void fa_destroy(struct fa *self)
{
	free(self->states); // L'erreur disparait si je commente cela...
	free(self);
}
 
 
int main()
{
struct fa *autom=NULL;
printf("Coucou 1 \n");
fa_create(autom, 3, 5);
printf("Coucou 2 \n");
fa_destroy(autom);
printf("Coucou 3 \n");
}