Bonsoir à tous,
J'ai un devoir qui consiste à gérer un ensemble d'intervalles (des fonctions créées avant permettent de manipuler les intervalles mais là n'est pas la question ^^). Voilà les déclarations des types NOEUD, ENSEMBLE et INTERVALLE :
	
	1 2 3 4 5 6 7
   | typedef struct NOEUD
{
  intervalle interv;
  struct NOEUD *suivant;
} noeud;
 
typedef noeud *ensemble; | 
 
	
	1 2 3 4
   | typedef struct {
    int min;
    int max;
} intervalle; | 
 Je dois ensuite créer une fonction d'en-tête (non modifiable), qui permet d'insérer dans un ensemble un intervalle, mais ces intervalles sont triés selon leur borne MIN :
	
	void inserer(ensemble * E, intervalle I)
 J'ai donc tenté de réaliser cette fonction mais lors de l'exécution (la fonction est appelée dans main() ), un message me dit "Erreur de segmentation".
Voici mon code :
	
	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
   | void inserer(ensemble * E, intervalle I)
{
  noeud *n = *E;
  noeud *tmp;
  while (n != NULL) {
    if (n == NULL) {
      tmp->interv = I;
      tmp->suivant = NULL;
      n = NULL;
    } else if (I.min > n->interv.min && n->suivant == NULL) {
      tmp->interv = n->interv;
      tmp->suivant->interv = I;
      tmp->suivant->suivant = NULL;
      n = NULL;
    } else if (I.min > n->interv.min && I.min < n->suivant->interv.min) {
      tmp->interv = n->interv;
      tmp->suivant->interv = I;
      tmp->suivant->suivant = n->suivant;
      n = NULL;
    } else if (I.min < n->interv.min) {
      tmp->interv = I;
      tmp->suivant = n;
      n = NULL;
    } else {
      tmp->interv = n->interv;
      n = n->suivant;
    }
  }
  *E = tmp;
} | 
 Et la ligne permettant d'appeler cette fonction (I1 est un intervalle déjà défini) :
	
	inserer((ensemble *) e, I1);
 J'avais essayé de bidouiller avec des "malloc" mais sans succès...
Si quelqu'un peut m'aider, j'écoute avec attention 
						
					
Partager