Se connecter avec
S'enregistrer | Connectez-vous

Probleme de structure et pointeurs

Dernière réponse : dans Programmation

Bonjour à tous, voila j'ai un petit probleme de structure et de pointeurs. Le but de ce petit bout de code est de me retourner l'identifiant maximum :
  1. typedef struct demandeur
  2. {
  3. char nom[NB_NOM], prenom[NB_PRENOM], adresse_mail[NB_MAIL];
  4. char rue[NB_RUE], ville[NB_VILLE], numero_tel[NB_TEL], cp[NB_CP];
  5. int id;
  6. demandeur *suivant;
  7. }demandeur;
  8.  
  9. typedef struct offre
  10. {
  11. char code_offre[6], salaire[6];
  12. char statut[20], designation[50], domaine[30];
  13. offre *offre_suivante;
  14. demandeur *tete_liste;
  15.  
  16. }offre;
  17.  
  18. int recherche_max_id()
  19. {
  20. offre *ptrOffre = tete_liste_offre;
  21. demandeur *ptrDem ;
  22. int max = 0;
  23.  
  24. while (ptrOffre != NULL)
  25. {
  26. ptrDem = ptrOffre->tete_liste;
  27. while (ptrDem != NULL)
  28. {
  29. if (ptrDem->id > max)
  30. {
  31. max = ptrDem->id;
  32. }
  33. ptrDem = ptrDem->suivant;
  34. }
  35. ptrOffre = ptrOffre->offre_suivante ;
  36. }
  37. return max;
  38. }

Ca fait pres de deux heures que je me prend la tete dessus, merci encore pour votre aide ..

Autres pages sur : probleme structure pointeurs

Lassé par la pub ? Créez un compte

bonjour,
quelques détails seraient appréciables:
ton programme se compile?
si ce n'est pas le cas, quel est le message d'erreur?
si c'est le cas, c'est quoi qui ne marche pas?
tete_liste_offre est elle initialisée?
les suivant, offre_suivante, tete_liste sont-ils initialisés à NULL?

coca25 a dit :
bonjour,
quelques détails serait appréciable:
ton programme se compile?
si ce n'est pas le cas, quel est le message d'erreur?
si c'est le cas, c'est quoi qui ne marche pas?
tete_liste_offre est elle initialisée?
les suivant, offre_suivante, tete_liste sont-ils initialisés à NULL?


Oui le programme se compile, mais lorsque j'execute cette procédure, un message d'erreur apparait :
"annuaire.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

tous ceci a été déclaré à NULL apres les declarations de structure :
  1. offre *tete_liste_offre = NULL;
  2. demandeur *suivant = NULL;
  3. offre *offre_suivante = NULL;


Merci encore pour ton aide...

poste ton code complet (enfin s'il n'est pas enorme) sur
http://pastebin.archlinux.fr/
par exemple pour voir les initialisations et le main surtout.
et poste le lien de la page

l'erreur est surement une erreur de segmentation (pointeur vers une zone non initialisée)
lorsque tu ajoutes une demande/offre, tu initialises bien toutes les valeurs?

coca25 a dit :
poste ton code complet (enfin s'il n'est pas enorme) sur
http://pastebin.archlinux.fr/
par exemple pour voir les initialisations et le main surtout.
et poste le lien de la page

l'erreur est surement une erreur de segmentation (pointeur vers une zone non initialisée)
lorsque tu ajoutes une demande/offre, tu initialises bien toutes les valeurs?


Je viens de mettre une partie de mon code sur http://pastebin.archlinux.fr/. J'ai enlevé toutes les fonctions qui n'étaient pas necessaire au probleme pour alléger le code car il faisait 2000lignes.
Ps : je sais mon code est loin d'être parfait! :) 

je viens d'essayer de tester ton code, le souci, c'est que je viens de voir qu'il n'est pas portable. il faut vc++ pour le compiler (enfin je crois)

de ce que j'ai pu voir, quelques remarques:
- tu utilises le même nom pour la structure et la définition du type de la structure
- il faut toujours vérifier le retour de malloc qui retourne NULL au cas où la réservation de mémoire échoue
- pour chaque allocation mémoire, il faut libérer celle-ci une fois qu'on ne l'utilise plus avec free()
- probablement ce qui cause l'erreur: dans les fonctions verif_longueur_x, tu alloues nb caractères, par contre lorsque tu arrives à la limite, tu ajoutes '\0' à nb+1 ce qui correspond à 2 cases de plus (commence à 0)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde