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 :

Pointeur sur char* déplacé par incrémentation d'une autre variable


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Pointeur sur char* déplacé par incrémentation d'une autre variable
    Bonjour à tous,

    Bonne année 2010 !!
    J'ai un drôle de problème qui me pertube beaucoup, si vous pouviez m'aider j'en serais ravi !
    L'idée générale : mettre des chaines de caractères dans une liste chaînée. Pour chaque élément de la liste, je copie une chaine de caractère en plusieurs morceaux dedans. Puis j'incrémente un compteur pour avoir le nombre total d'éléments dans ma liste. Sauf que l'incrémentation de ce compteur déplace le pointeur sur la chaine de caractère qui se trouve dans le premier élément de la liste !

    Quelques détails :
    - une structure de type sl_i contient un pointeur sur le début de la liste, un autre sur la fin de la liste, et le fameux compteur.
    - la liste chaînée est composée d'une structure de type s_node nommée new. Elle est remplie dans la fonction lb_fill_node, où tout se passe très bien.

    Mon problème :
    - avant la ligne "i_sl->len = i_sl->len + 1", tout va très bien. Quand je tape sous gdb "p i_sl->bg->name", j'obtiens bien "REMOTEHOST".
    - après cette ligne, "p i_sl->bg->name" donne "EMOTEHOST".
    - quand j'insère d'autres éléments (avec une fonction construite sur le même modèle), j'obtiens "MOTEHOST", et ainsi de suite, jusqu'à avoir une chaîne vide.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sl_i            *ins_first_elem(sl_i *i_sl, char *environ)
    {
      s_node        *new;
     
      new = xmalloc(sizeof(s_node), "ins_first_elem");
      new = lb_fill_node(environ, new);
      new->next = NULL;
      i_sl->bg = new;
      i_sl->end = new;
      i_sl->len = i_sl->len + 1;
      return (i_sl);
    }
    Mes deux structures :
    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
     
    typedef struct  s_node
    {
      char          *name;
      int           len1;
      char          *arg;
      int           len2;
      struct s_node *next;
    } s_node;
     
    typedef struct  sl_i
    {
      s_node        *bg;
      s_node        *end;
      int           len;
    } sl_i;
    En vous remerciant,
    Nathan
    Dernière modification par Melem ; 10/01/2010 à 17h26.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage par pointeur sur char, propre si possible
    Par wanecque dans le forum C++
    Réponses: 7
    Dernier message: 18/10/2014, 01h22
  2. Réponses: 2
    Dernier message: 15/03/2014, 20h18
  3. Réponses: 7
    Dernier message: 04/12/2012, 19h02
  4. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  5. Sizeof d'un pointeur sur char ...
    Par Mike888 dans le forum C
    Réponses: 8
    Dernier message: 03/11/2005, 13h04

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