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 :

Malloc d'un char ** du maillon d'une liste chainee


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut Malloc d'un char ** du maillon d'une liste chainee
    Bonsoir,

    Je suis entrain de coder un shell basique, j'ai un bug lors de la compilation:

    gcc -O -pipe -g3 -W -Wall -pedantic -ansi -c my_epur.c
    my_epur.c: In function `list_full_args_tab':
    my_epur.c:26: error: request for member `cmd' in something not a structure or union
    my_epur.c: In function `list_malloc_args_tab':
    my_epur.c:41: error: request for member `cmd' in something not a structure or union
    my_epur.c:41: error: request for member `cmd' in something not a structure or union
    my_epur.c:46: error: request for member `cmd' in something not a structure or union
    my_epur.c:46: error: request for member `cmd' in something not a structure or union
    my_epur.c:47: error: request for member `cmd' in something not a structure or union
    my_epur.c:51: error: request for member `cmd' in something not a structure or union
    *** Error code 1


    J'essaie de malloc le char **cmd du maillon de ma liste (t_data *new) de la taille du char **args de ma structure, et de copier l'un dans l'autre:

    fichier.h
    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
    typedef struct s_path
    {
      char          *path;
      int           i;
      int           y;
      int           debut;
      int           fin;
    }               t_path;
     
    typedef struct s_args
    {
      int           nb_read;
      int           len;
      char          **args;
    }               t_args;
     
    typedef struct  s_data
    {
      char          **cmd;
      struct s_data *next;
    }               t_data;
    Ici j'appel mes fonctions
    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
    void            ordon_data(t_data **list, t_args *ptr)
    {
      t_data        *moove;
      t_data        *new;
    
      new = malloc(sizeof(*new));
      new->next = NULL;
      list_malloc_args_tab(&new, ptr->args, ptr->len);
      list_full_args_tab(&new, ptr->args);
      if (*list == NULL)
        *list = new;
      else if (*list != NULL)
        {
          moove = *list;
          while (moove != NULL)
            moove = moove->next;
          moove = new;
        }
    }
    Ici je tente de malloc et de copier
    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
    32
    33
    34
    35
    36
    37
    38
    39
    void            list_full_args_tab(t_data **new, char **args)
    {
      int           y;
      int           x;
    
      y = 0;
      x = 0;
      while (args[y])
        {
          while (args[y][x])
            {
              (*new->cmd)[y][x] = args[y][x];
              x++;
            }
          y++;
          x = 0;
        }
    }
    
    void            list_malloc_args_tab(t_data **new, char **args, int len)
    {
      int           x;
      int           y;
    
      x = 0;
      y = 0;
      (*new->cmd) = malloc((len + 1) * sizeof(*(*new->cmd)));
      while (args[y])
        {
          while (args[y][x])
            x++;
          (*new->cmd)[y] = malloc((x + 1) * sizeof(*(**new->cmd)));
          (*new->cmd)[y][x + 1] = '\0';
          y++;
          x = 0;
        }
      (*new->cmd)[y] = NULL;
    }
    Merci de me donner un petit coup de main !

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Sachant que new est un pointeur tu as mal placé ta parenthèses


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    Je viens d'isoler le pointeur a l'exterieur des parenthèses comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *(new->cmd)[y][x] = args[y][x];
    et j'ai exactement les memes erreurs...

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    C'est encore faux !
    Je t'ai donné la bonne écriture, relis bien ce que j'ai mis

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    Exact ! Merci beaucoup, bonne journée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/03/2014, 09h31
  2. Réponses: 5
    Dernier message: 15/03/2008, 21h44
  3. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28
  4. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  5. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20

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