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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
typedef struct NOEUD
{
  intervalle interv;
  struct NOEUD *suivant;
} noeud;
 
typedef noeud *ensemble;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

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
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) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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