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