[Résolu] problème avec les pointeurs en c
bonjour à tous. Je suis entrain de faire des exercices sur les listes chainées, mais j'avoue qu'il y a quelque chose que je n'ai pas bien compri. J'ai fais un code à mo avis très simple d'insertion d'entiers dans une liste ordonée mais je ne sais pas vraiment à quel niveau se trouve le problème, j'ai une erreur du type "segentation fault", donc un problèmr de pointeurs j'immagine. je vous poste le code et voir si vous pourriez me donner un coup de main. Je suis ouvert à tous les critiques et suggestions,..merci d'avance
voici mon type Liste
Code:
1 2 3 4 5 6
| typedef struct Liste{
int valeur; //champ données
struct Liste *suiv; //pointeur vers l'élément suivant
} Liste; |
puis le code
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 31 32 33 34 35 36
| void insererEnOrdre(Liste **tete, int x){
Liste *p, *pp, *nouvelElement;
p = *tete;
pp = p;
//printf("(x, tete.val) = (%d , %d )\n", (*tete)->valeur, x);
if(*tete == NULL){
printf("1 ");
ajouterEnTete(tete, x);
}else{
while(p!=NULL && x > p->valeur){
pp = p;
p = p->suiv;
}
if(p!=NULL && x == p->valeur){
//on insert pas x ici, mais on peut bien choisir de l'inserer aussi
//dans ce cas on le fais dans le cas précédent
printf("%d existe déjà ",x);
return;
}else{
nouvelElement = malloc(sizeof(Liste));
nouvelElement->valeur = x;
if(p!=NULL && x < p->valeur){
//insertion de x avant p et après pp
nouvelElement->suiv = p;
pp->suiv = nouvelElement;
}else{
//insertion en queue
//nouvelElement->suiv == NULL;
pp->suiv = nouvelElement;
}
}
}
} |
et mon main
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h>
#include <stdlib.h>
#include "ListeChaineeSimple.h"
int main(void){
Liste *maListe = NULL;
insererEnOrdre(&maListe, 60);
insererEnOrdre(&maListe, 20);
insererEnOrdre(&maListe, 15);
insererEnOrdre(&maListe, 100);
insererEnOrdre(&maListe, 15);
insererEnOrdre(&maListe, 10);
afficher(maListe);
return EXIT_SUCCESS;
} |