Bonsoir, je travaille sur les listes chainées pour un projet( ici il s'agit d'ajouter un element de type Cave dans une liste) et ca fait des heures ke je tourne en rond à cause d'une erreure que me donne le compilateur lors de l'éxécution du fichier ajouterVin2.c dont l'éxécutable est ajouter2:
"4 [main] ajouter2 5820_cygtls:: handle_exceptions:Error while dumping state[probably corrupted stack]
Segmentation fault(core dumped)"

En faite je travail sous windows avec cygwin. Et merci d'avance pour votre aide.

voici le code:

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
//fichier vin2.h
struct Vin  
{
	char region[16];
	char domaine[20];//domaine de cultivation(lieu)
	char chateau[20];//ex:Bordeaux
	char couleur[15];
	int annee;
	char cepage[12];//d�crit la vari�t� de plante de la vigne utilis�e pour produire le vin
	int taille;
	int nbBouteilles;
	int anneeMat;//l'ann�e de maturit�
	char localisation[4];//dans la cave
	char commentaires[70];		
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
//fichier cave2.h
typedef struct Cave *pCave;
 
struct Cave  
{	
	struct Vin *carac;//les caractéristiques du vin
	struct Cave *suivant;
 
};
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//fichier ajouterVin2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vin2.h"
#include "cave2.h"
 
 
/**********************************************
La fonction int ajouterVin(pvin nom) renverra 0 si l'ajout du vin dans 
la liste chainee se fera sans aucune erreur et 1 sinon.
*********************************************************/
 
int ajouterVin(pCave vin,pCave tete)
{
	pCave nouveau;
	pCave courant;
	char *res;
 
 
	if(tete==NULL)//la liste est vide, c'est donc le premier vin qui est ajouté
	{	
		printf("Debut:1\n");
		nouveau=(pCave)malloc(sizeof(struct Cave));//alloue la mémoire nécessaire au nouveau maillon de la liste
 
		if(nouveau==NULL)
		{	printf("Erreure s'est produite lors de l'allocation dynamique de la mémoire dans l'ajout\n");
			return 1;
 
		}		
		else
		{	
			nouveau->suivant=tete;//la tete est assigné au maillon suivant ici null car la liste est vide
			tete=nouveau;
			printf("Debut:1\n");
		}
	}
 
	else//la liste contient au moins 1 element
	{
		courant=tete;
 
		if(courant->suivant!=NULL) //parcours de la liste chaînée jusqu'au dernier maillon 
		{	
			courant=courant->suivant;
 
		}
 
		nouveau=(pCave)malloc(sizeof(struct Cave));//alloue la mémoire nécessaire au nouveau maillon de la liste
 
		if(nouveau==NULL)
		{	printf("Erreure s'est produite lors de l'allocation dynamique de la mémoire dans l'ajout\n");
			return 1;
		}
		else
		{
			printf("Debut:1\n");
			courant->suivant=nouveau;
			printf("Debut:1\n");
			nouveau->suivant=NULL;
 
		}
	}
 
	//insertion des caractéristiques du vin dans l'élément nouveau
	res=strcpy(nouveau->carac->region,vin->carac->region);
	res=strcpy(nouveau->carac->domaine,vin->carac->domaine);
	res=strcpy(nouveau->carac->chateau,vin->carac->chateau);
	res=strcpy(nouveau->carac->couleur,vin->carac->couleur);
	nouveau->carac->annee=vin->carac->annee;
	res=strcpy(nouveau->carac->cepage,vin->carac->cepage);
	nouveau->carac->taille=vin->carac->taille;	
 
	free(nouveau);
 
	return 0;
 
}
 
int main()
{
	char *res;
	pCave vin1;
	//pCave vin2;
	pCave tete;
	tete=NULL;
	printf("Debut:1\n");
	res=strcpy(vin1->carac->region,"Bordeaux");
	res=strcpy(vin1->carac->domaine,"domaine familial");
	res=strcpy(vin1->carac->chateau,"Bordeaux Côtes de francs");
	res=strcpy(vin1->carac->couleur,"Rouge");
	vin1->carac->annee=1993;
	res=strcpy(vin1->carac->cepage,"merlot");
	vin1->carac->taille=2;	
	vin1->carac->nbBouteilles=10;
	vin1->carac->anneeMat=10;
	res=strcpy(vin1->carac->localisation,"3C");
	printf("fin\n");
	res=strcpy(vin1->carac->commentaires,"lalalalallala");
 
	if((ajouterVin(vin1,tete))!=0)
		printf("Erreur lors de l'insertion d'un vin\n");
	else
		printf("Succes de l'ajout du vin\n");
 
             return 0;
}