[C] Liste chaînée / pointeur : problème !

Liste chaînée / pointeur : problème ! [C] - C - Programmation

Marsh Posté le 11-10-2003 à 17:43:57    

Voila j'ai un problème dans une fonction qui doit supprimer un maillon de ma liste chainée...
 
Voici la structure:  
 

Code :
  1. typedef struct personnel
  2.         {
  3.         char nom[20];
  4.         char prenom[20];
  5.         char sexe[1];
  6.         int age[2];
  7.         int departement[2];
  8.         int remuneration[7];
  9.         int id[10];
  10.         struct personnel *suivant;
  11.         struct personnel *precedent;
  12.         }personnel;


 
et voici le code de ma fonction:
 

Code :
  1. void supprime_pers(personnel *premierepers, personnel *dernierepers, personnel *perscourante)
  2. {
  3.         if (*premierepers->id ==0)
  4.         {
  5.                 printf("\n\t\tIl n'y a pas d'entree dans la base..." );
  6.         }
  7.         else
  8.         {
  9.                 int id=0, no_id=1, id_pers;
  10.                 perscourante=premierepers;
  11.                 system("clear" );
  12.                 printf("\n\t\tID de la personne a supprimer ? (0 pour sortir) " );
  13.                 scanf("%d",&id);
  14.                 if (id==0)
  15.                 {
  16.                         return;
  17.                 }
  18.                 if (*dernierepers->id<id)
  19.                 {
  20.                         printf("\n\t\tL'ID specifie n'existe pas dans la base..." );
  21.                         getchar(); getchar();
  22.                         return;
  23.                 }
  24.                 while((*perscourante->id)!=(id)) //mon problème se situe par ici
  25.                 {
  26.                         printf("boucle\n" );
  27.                         perscourante=perscourante->suivant);
  28.                 }
  29.                 printf ("\nnom: %s", *perscourante->nom);
  30.                 getchar();
  31.         }
  32.         getchar();
  33. }


 
Mon probleme se trouve dans la derniere boucle while... erreur de  segmentation :/
 

Code :
  1. ID de la personne a supprimer ? (0 pour sortir) 1
  2. Erreur de segmentation
  3. [root@portable projetc]#


 
Ce que je cherche à faire c'est retrouver une fiche de renseignement d'une personne et la supprimer, pour cela je passe par l'ID de la personne en le cherchant... pour l'instant je cherche l'ID et j'affiche le nom, plus tard je supprimerais la fiche.
 
Je lutte depuis une bonne demi heure pour trouver mon erreur, si quelqu'un peut me l'expliquer ou me corriger, ce serait très sympa :)


Message édité par LaTeX_ le 11-10-2003 à 17:46:38
Reply

Marsh Posté le 11-10-2003 à 17:43:57   

Reply

Marsh Posté le 11-10-2003 à 18:04:51    

Le champ id dans ta struct est un pointeur (un tableau), et tu le compares à un entier -> BOOM !
 
EDIT :enfin c'est pas la comparaison qui fait planter hein ! Mais personnecourante->id n'est jamais égal à id, où alors une fois de temps en temps si tu as vraiment beaucoup de chance.


Message édité par R3g le 11-10-2003 à 18:05:58
Reply

Marsh Posté le 11-10-2003 à 18:09:12    

J'ai essayé avec un int dans la structure et ca fait pareil (??)
 
Tu peux m'expliquer comment faire pour résoudre mon pbleme?
 
:jap:

Reply

Marsh Posté le 11-10-2003 à 18:16:32    

Deja j'aimerais bien que tu m'expliques pourquoi tu mets des tableaux d'entiers pour ranger l'age, le département etc. J'ai la vague impression que tu n'as rien compris aux pointeurs....
 
Ensuite si tu pouvais poster le code ou personne.id est initialisé...

Reply

Marsh Posté le 11-10-2003 à 18:22:00    

R3g a écrit :

Deja j'aimerais bien que tu m'expliques pourquoi tu mets des tableaux d'entiers pour ranger l'age, le département etc. J'ai la vague impression que tu n'as rien compris aux pointeurs....
 
Ensuite si tu pouvais poster le code ou personne.id est initialisé...


 
ca c'est vrai je reconnais que je me suis planté, et je m'en suis aperçu avant de poster et j'avais la flemme de tout changer alors je n'ai tester que pour id, sans résultat...  
 
je corrige mon code et je reviens ;)

Reply

Marsh Posté le 11-10-2003 à 18:37:25    

au début du main je fais :

Code :
  1. personnel *premierepers, *dernierepers, *perscourante;
  2.         int init='0', selection=0;
  3.         premierepers=(personnel*)malloc(sizeof(personnel));
  4.         dernierepers=premierepers;
  5.         perscourante=premierepers;


 
et voila la fonction d'insertion d'une personne:
 
*édité*


Message édité par LaTeX_ le 11-10-2003 à 19:05:23
Reply

Marsh Posté le 11-10-2003 à 18:51:01    

T'as plus qu'à prier pour que Taz ne voit pas ton topic....
 
Sinon, au lieu de  

Code :
  1. ((*perscourante->id)!=(id))


essaie de faire

Code :
  1. ((*perscourante).id)!=(id))

ou

Code :
  1. ((perscourante->id)!=(id))


 
Tu as un problème avec les opérateurs * et -> ; essaie de bien comprendre ce qui, dans ton code, est un pointeur et ce qui ne l'est pas.
 
EDIT : j'arrête pas d'oublier des / aujourd'hui


Message édité par R3g le 11-10-2003 à 18:51:38
Reply

Marsh Posté le 11-10-2003 à 19:03:50    

j'ai trouvé mon erreur...
 
printf ("\nnom: %s", *perscourante->nom); => perscourante->nom  
 
comme c'était juste après c'te boucle, ben il me marquait l'erreur de segmentation juste avant d'afficher le "top" que je lui demandais à chaque boucle :/ ...
 
Comme toujours c'est après avoir fait une pause que je trouve mon erreur  :o  
 
Merci bcp de ton aide ;)


Message édité par LaTeX_ le 11-10-2003 à 19:04:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed