Bonjour,

j'ai mon programme qui s'arrete à free(arc1). qu'est ce qui ne va pas ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
	//suppression des arcs    
	while(arc1 != NULL)
	   {
	   arc2=arc1->suiv_arc;
	   free(arc1);             //ARRET DU PROGRAMME
	   arc1=arc2;
	   }
    free(s);
voici la fonction complete:

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
 
 
  typedef struct chainon {
  	char eti[eti_max];   //etiquette
	struct s *cible;      // cible de l'arc
	struct chainon *suiv_arc;  //pointe sur l'arc suivant
	} arc,*parc;
 
  typedef arc *liste;
 
  typedef struct s{
  	int ef;     //etat final (0/1)
	int sommet;  //numero du sommet
	parc arc;  //pointe sur la liste des arcs de l'etat
	struct s *prec_etat; //pointe sur l'etat precedent
	} som, *psom;
 
 
//suppression d'un sommet et de ses arcs
 
void supp_som(psom *prem_som,int n_som)
{ 
 
  psom s,s_avant;
  parc arc1,arc2;
 
 s=(*prem_som);
 s_avant=NULL;
 
if(s==NULL)
   printf("La liste est deja vide\n");
else 
   {
   //on cherche le sommet a supprimer
   while((s!=NULL) && (s->sommet != n_som))
      {
	  s_avant=s;
	  s=s->prec_etat;
	  }
 
   if(s->sommet==n_som)
      {
	  //on supprime le sommet de la liste
      if(s_avant==NULL)	//si c'est le 1er sommet de la liste
	    (*prem_som)=s->prec_etat;
   	  else
	     s_avant->prec_etat = s->prec_etat;  
 
	  //on veut supprimer les arcs du sommet
	  arc1=s->arc;
      // free(s);
 
	  //suppression des arcs    
	  while(arc1 != NULL)
	    {
	    arc2=arc1->suiv_arc;
	    free(arc1);
	    arc1=arc2;
	    }
      free(s);
	  }
   }
}