Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
788 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°537135
LaTeX_
Pôôôpaa !
Posté le 11-10-2003 à 17:43:57  profilanswer
 

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
mood
Publicité
Posté le 11-10-2003 à 17:43:57  profilanswer
 

n°537141
R3g
fonctionnaire certifié ITIL
Posté le 11-10-2003 à 18:04:51  profilanswer
 

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
n°537145
LaTeX_
Pôôôpaa !
Posté le 11-10-2003 à 18:09:12  profilanswer
 

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:

n°537153
R3g
fonctionnaire certifié ITIL
Posté le 11-10-2003 à 18:16:32  profilanswer
 

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é...

n°537157
LaTeX_
Pôôôpaa !
Posté le 11-10-2003 à 18:22:00  profilanswer
 

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

n°537171
LaTeX_
Pôôôpaa !
Posté le 11-10-2003 à 18:37:25  profilanswer
 

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
n°537195
R3g
fonctionnaire certifié ITIL
Posté le 11-10-2003 à 18:51:01  profilanswer
 

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
n°537211
LaTeX_
Pôôôpaa !
Posté le 11-10-2003 à 19:03:50  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
probleme avec delphi 7Problème de Guillemets ...
[ MySQL ] Problème d'user[ basic ] problème avec mon ZX81
[HTML] Problème d'intégration FLASH[Java] Plusieurs versions de JVM installées : problème
[vb] programme qui liste les sous dossiers d un dossierProblème d'installation phpnuke 6.9.1
Probleme avec str_replace[algo] problème d'inclusion de boucle
Plus de sujets relatifs à : [C] Liste chaînée / pointeur : problème !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR