IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème de pointeur avec les listes chainees


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut problème de pointeur avec les listes chainees
    Hello !
    Encore une fois j'ai un ptit prob...

    J'ai créé une structure Sharer et je veux ajouter à la suite plusieurs Sharer...
    on problème est que lorsque j'ajoute, tout est ok, une fois que je fai un affiche après avoir retourner le tout, ce qui a été ajouté c'est n'importe koi ! comme si il le NULL n'a pas été remplacé...

    Mes sources:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct listePartage
    {
    	struct sockaddr_in * ip ;
    	struct listePartage * suivant ;
    	int nbConnection ;
     
    }Sh;
     
    typedef struct listePartage * Sharer ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sharer sharerNouv()
    {
    	Sharer  s = (Sharer) malloc(sizeof (struct listePartage)) ;
    	s->suivant = NULL ;
    	s->nbConnection = 0 ;
     
     
    	return s ;
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    void ajoutSharer(Sharer l, struct sockaddr_in a)
    {
    	Sharer  s = sharerNouv() ;
     
     
    	s->ip=&a ;
    	printf("WHHHATTTT %s\n", inet_ntoa(s->ip->sin_addr.s_addr));
     
    	Sharer courant = l ;
     
    	while(courant->suivant!=NULL)
    	{
    		courant=courant->suivant ;
     
    	}
     
    	courant->suivant = s ;
     
    	printf("adresse mise %s\n", inet_ntoa(s->ip->sin_addr.s_addr)) ;	
    	printf("port mis %d\n", ntohs(s->ip->sin_port)) ;
     
    	//return l ;
     
    }
    Merci d'avance !

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    As-tu géré le premier cas ou l'argument l est NULL, ou éventuellement non initialisé ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    oui, tout a été initialisé au préalable...
    l pointe toujous la structure initiale que je met en place avant d'ajouter quelque chose...

    en fait j'ai l'impression il ne fai pas le lien entre le premier élément et celui qu'on ajoute...

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En fait, mo je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sharer ajoutSharer(Sharer l, struct sockaddr_in a)
    {
       Sharer  s = sharerNouv() ;
     
       if (s == NULL)
      {
         fprintf(stderr, "Pb mémoire\n");
         return NULL;
      }
       s->ip=&a ;
       printf("WHHHATTTT %s\n", inet_ntoa(s->ip->sin_addr.s_addr));
     
       if (l == NULL)
           return s;
     
       Sharer courant = l ;
     
       while(courant->suivant!=NULL)
       {
          courant=courant->suivant ;
     
       }
     
       courant->suivant = s ;
     
       printf("adresse mise %s\n", inet_ntoa(s->ip->sin_addr.s_addr)) ;   
       printf("port mis %d\n", ntohs(s->ip->sin_port)) ;
     
      return l ;
     
    }
    Maintenant, si l'ordre n'a pas d'importance, pourquoi insères-tu en fin de liste ??
    C'est beaucoup plus simple et plus rapide de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sharer ajoutSharer(Sharer l, struct sockaddr_in a)
    {
       Sharer  s = sharerNouv() ;
     
       if (s == NULL)
      {
         fprintf(stderr, "Pb mémoire\n");
         return NULL;
      }
       s->ip=&a ;
       printf("WHHHATTTT %s\n", inet_ntoa(s->ip->sin_addr.s_addr));
     
       s->suivant = l;
      return s;
     
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    j'ai utilisé ta deuxieme solution pour ajoutSharer et ça ne change rien. L'adresse qui a été ajoutée dans la liste reste toujours bizarre ... lorsqu'on l'on affiche cette adresse dans la fonction ajoutSharer, elle correspond à ce qu'on attend .. mais lorsque l'on affiche la liste après que la fonction ajoutSharer ait été éxécutée ... l'adresse dans la liste est fausse... pourtant la fonctionne n'est pas en static ni rien je ne vois pas ...

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    C'est sans doute un autre problème du a struct sockaddr_in a. Passe plutôt un pointeur vers a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sharer ajoutSharer(Sharer l, struct sockaddr_in &a)
    Car la, tu as l'adresse au moment de l'appel de la fonction qui devient fase dès qu'on sort de cette fonction.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    c'est bon ça marche merci ... mais par contre j'ai pas compris cette histoire de fase ... tu peux men dire plus ?

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    j'ai pas compris cette histoire de fase
    moi non plus
    fase : : :
    D'autre part, j'ai fait une faute de frappe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sharer ajoutSharer(Sharer l, struct sockaddr_in *a)
    C'est * qu'il faut mettre, on n'est pas en C++
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    ouh là lol ...

    Car la, tu as l'adresse au moment de l'appel de la fonction qui devient fase dès qu'on sort de cette fonction.
    et là phrase exacte serait donc ? lol

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    OK je ne me suis pas relu
    Citation Envoyé par Trap D qui aurait du écrire
    Car la, tu as l'adresse au moment de l'appel de la fonction qui devient fausse dès qu'on sort de cette fonction.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. [TP 7] Problème avec les listes chaînées (error 202)
    Par thelinekioubeur dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/12/2006, 23h15
  2. Problème avec les listes
    Par labatunga dans le forum Scheme
    Réponses: 4
    Dernier message: 26/11/2006, 21h09
  3. Problème avec les listes
    Par aliassaf dans le forum Général Python
    Réponses: 3
    Dernier message: 10/07/2006, 17h57
  4. Problèmes de pointeurs avec les arbres
    Par thierry57 dans le forum C
    Réponses: 17
    Dernier message: 22/12/2005, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo