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

  FORUM HardWare.fr
  Programmation
  C

  Structures, pointeurs..affichage?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Structures, pointeurs..affichage?

n°1930919
dj_titeuf
Posté le 11-10-2009 à 04:07:10  profilanswer
 

Bonsoir,
 
A partir du code suivant, je ne comprends pas pourquoi à l'exécution du programme aucun affichage ne se fait. Pouvez-vous m'expliquer svp? Deuxième question: quelle est l'utilité de créer iter, pourquoi ne pas se contenter de list? Merci d'avance!
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct elem {
  4.   int i;
  5.   struct elem * next;
  6. };
  7. void ajouter (struct elem *list, int i){
  8.   struct elem * e;
  9.   e=malloc(sizeof(struct elem));
  10.   e->i=i;
  11.   e->next= list;
  12. }
  13. int main(){
  14.   struct elem * list=NULL;
  15.   struct elem* iter=NULL;
  16.   int i;
  17.   ajouter (list,1);
  18.   ajouter (list,2);
  19.   ajouter (list,3);
  20.   iter=list;
  21.   for (i=0;i<2;i++){
  22.     if (iter) {
  23.       printf("%d ",iter->i);
  24.       iter=iter->next;
  25.     }
  26.   }
  27.   return 0;
  28. }


mood
Publicité
Posté le 11-10-2009 à 04:07:10  profilanswer
 

n°1930974
Joel F
Real men use unique_ptr
Posté le 11-10-2009 à 14:49:14  profilanswer
 

ajoute doit prendre un pointeur de pointeur sinon tu ne modifie qu'une copie local de list.

n°1931331
Sve@r
Posté le 12-10-2009 à 22:11:12  profilanswer
 

dj_titeuf a écrit :

Bonsoir,
 
A partir du code suivant, je ne comprends pas pourquoi à l'exécution du programme aucun affichage ne se fait. Pouvez-vous m'expliquer svp? Deuxième question: quelle est l'utilité de créer iter, pourquoi ne pas se contenter de list? Merci d'avance!
 

Code :
  1. void ajouter (struct elem *list, int i){
  2.   struct elem * e;
  3.   e=malloc(sizeof(struct elem));
  4.   e->i=i;
  5.   e->next= list;
  6. }



Ouch cte horreur !!!
Chaque fois que la fonction est appelée, elle alloue de la mémoire et stocke l'adresse allouée dans une variable locale qui n'est perdue en fin de fonction => fuite mémoire assurée
 
Quand à ta question 2 c'est presque la même raison. Si tu modifies list ben tu perds ton pointeur de début.
 
Maintenant, si vraiment tu veux faire des listes de façon correcte, alors je te conseille la méthode suivante : tu crées une structure permettant de tenir la liste. La structure peut très bien ne tenir que le pointeur de début ce n'est pas grave. Ca peut paraître idiot de créer une structure juste pour un pointeur mais ensuite, rien ne t'empêche de rajouter d'autres éléments comme par exemple
- le nombre de chainons
- le pointeur en cours de traitement
- un pointeur de fin (pour la parcourir dans l'autre sens)
etc
Si tu prévois dès le début ce genre de cas, tu auras moins de travail plus tard pour faire évoluer ton code. Et en plus ça t'évitera de passer par des pointeurs de pointeurs lorsque tu devras modifier un élément
 
Ensuite tu crées des fonctions très basiques permettant
- d'ajouter un élément
- en enlever
- afficher
etc etc
Ensuite, dans ton programme principal, tu n'as plus qu'à appeler la fonction qui va bien quand t'en as besoin.
 
Un exemple pour débuter

Code :
  1. typedef struct s_elem {
  2.    int i;
  3.    s_elem *next;
  4. } t_elem;
  5.  
  6. typedef struct {
  7.    t_elem *first;
  8. } t_liste;
  9.  
  10. void init(t_liste *l)
  11. {
  12.    l->first=NULL;
  13. }
  14.  
  15. void freeListe(t_liste *l)
  16. {
  17.    t_elem *pt;
  18.    if (l->first == NULL) return;
  19.  
  20.    for (pt=l->first; pt->next != NULL; pt=pt->next)
  21.        free(pt);
  22.    l->first=NULL;
  23. }
  24.  
  25. int main()
  26. {
  27.    t_liste maListe;
  28.    init(&maListe);
  29.    ...
  30.    freeListe(&maListe);
  31. }


Message édité par Sve@r le 12-10-2009 à 22:11:33

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1931597
dj_titeuf
Posté le 13-10-2009 à 20:09:51  profilanswer
 

Ok, merci pour ta réponse, je pense avoir saisi! :)


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

  Structures, pointeurs..affichage?

 

Sujets relatifs
probleme d'affichage de mon site webPb d'affichage d'un site sous IE6
Cas où les références remplacent mal les pointeurs ?affichage des résultats d'une requête SQL
xml problème affichage dans FirefoxAffichage de toutes les dates
Problème affichage Safari (HTML/CSS)Problème affichage html
Affichage texte dans (fenêtre flottante?)Différences affichage FF windows / FF Linux
Plus de sujets relatifs à : Structures, pointeurs..affichage?


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