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 :

Pb pointeur tableau struct


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 68
    Par défaut Pb pointeur tableau struct
    Bonjour,

    Je bloque en ce moment sur un problème de déclaration d'un pointeur de tableau de struct.

    je travail sous Visual studio en C.

    J'utilise un pointeur car cette variable est elle même dans un struct. donc il faut que ca taille soit connue. Or je ne la connais pas d'avance.

    Voilà la strucuture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     
     
     
    typedef struct data{<div style="margin-left:40px">int Nb;
     char* name;   
     struct* data* elt[]; // ici mon pointeur de tableau de struct
     
     
     
    </div>} data;
    Je n'arrive pas à déclarer (et affecter donc) le nombre d'élément à mon tableau afin d'y ajouter des struct.

    Le but etant de stocker les lignes d'un fichier "hierarichiquement". La hierarchi etant definie par le nombre de tabulation.

    ex de fichier contenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    g1
    
    sg10 sg11
    ssg110 ssg111
    sg12
    g2 g3 g4
    sg40
    Cela donnait dans ma structure :

    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
     
    [0]_nb=3
    [0]_name = "g1"
    [0]_elt->
    <div style="margin-left:40px">[0]_nb=0 
    [0]_name = "sg10"
    [0]_elt = NULL;
    [1]_nb=2
    [1]_name = "sg11"
     
    [1]_elt-><div style="margin-left:40px">[0]_nb=0 
    [0]_name = "sg110"
    [0]_elt = NULL;
    [1]_nb=0
    [1]_name = "sg111"
    [1]_elt = NULL;
    </div>[2]_nb=0 
    [2]_name = "sg12"
    [2]_elt = NULL;
    </div>[1]_nb=0 [1]_name = "g2"
    [1]_elt-> NULL;
    [2]_nb=0
    [2]_name = "g3"
    [2]_elt-> NULL;
    [3]_nb=1
    [3]_name = "g4"
     
    [3]_elt-><div style="margin-left:40px">[0]_nb=0 
    [0]_name = "sg40"
    [0]_elt = NULL;
    </div>

    est ce que quelqu'un pourrait m'aider sur ce problème?

    peut être avez vous dejà fait ce genre de chose?

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Je comprends pas ce que tu veux faire.

    Un tableau de pointeur de struct?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct data{
        int Nb;
        char* name;
        struct data **elt; // ici mon pointeur de tableau de struct 
    } Data;

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 68
    Par défaut
    ce que j'aimerai faire c'est un tableau contenant une structure.

    Un des champ de cette structure est un pointeur vers un tableau de cette même structure.

    Un genre de liste en fait.

    Si je déclare le pointeur de tableau comme tu le fais (struct data ** elt au lieu de struct data * elt[]) je n'arrive pas à le gérer comme un tableau. Pourtant c'est la même chose me diras tu.

    Peut être est ce un problème de Visual studio?

    quand j'utilise "struct data ** elt" et que je déclare mon tableau le débugueur ne m'affiche pas les elements du tableau. seul le premier element est visible comme si il n'y avait qu'un pointeur simple vers une donnée.

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    En fait je comprends pas tres bien.

    Tu as une structure OK
    Cette strucutre à un tableau de pointeurs sur structures OK

    Je ne comprends pas à quoi sert ce tableau.

    Sinon est-ce que tu as bien mallocé comme il faut?

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Skyrunner
    Sinon est-ce que tu as bien mallocé comme il faut?
    Je tique pareil, tu peux nous montrer ton malloc ?

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 68
    Par défaut
    voici mon prog :

    #include <stdio.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
    22
    23
     
     
    typedef struct d{
     int Nb_elt;
     char* name;
     struct d **elt;
    } data;
    typedef data* design;
    void main(int argc, char* argv[]) {
     design* D;
     
     D=(data**)malloc(2*sizeof(data*));
     
     D[0]=(data*)malloc(sizeof(data));
     D[0]->Nb_elt = 0;
     D[0]->elt = (data**)malloc(sizeof(data*));
     *(D[0]->elt) = (data*)malloc(3*sizeof(data));
     
    D[1]=(data*)malloc(sizeof(data));
     D[1]->Nb_elt = 0;
     D[1]->elt = (data**)malloc(sizeof(data*));
     *(D[1]->elt) = (data*)malloc(3*sizeof(data));
    }
    ici je déclare un tableau de 2 structures qui ont eux même un tableau de 3 structures.

    toutefois regardez ce que j'ai sous le débugueur (cf image jointe).

    on ne voit pas tout le tableau.
    Images attachées Images attachées  

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par H-raf
    J'ai fait une realisation mediocre du fameux jeu Snake <...>
    Rapport avec le sujet ? Merci de créer un nouveau sujet...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par difficiledetrouver1pseudo
    Le but etant de stocker les lignes d'un fichier "hierarichiquement". La hierarchi etant definie par le nombre de tabulation.

    ex de fichier contenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    g1<div style="margin-left:40px">sg10 
    sg11<div style="margin-left:40px">ssg110 
    ssg111
    </div>sg12</div>g2 
    g3
     
    g4<div style="margin-left:40px">sg40</div>
    Ok, c'est un bête arbre à feuilles multiples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct node
    {
       T data;
       size_t nb_children;
       struct node **a_children;
    };
    (Il doit y avoir un nom savant que j'ignore...)

    On peut ajouter éventuellement un
    pour un parcours plus facile... Je te laisse avec l'algo qui doit être assez velu...

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 68
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ok, c'est un bête arbre à feuilles multiples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct node
    {
       T data;
       size_t nb_children;
       struct node **a_children;
    };
    (Il doit y avoir un nom savant que j'ignore...)

    On peut ajouter éventuellement un
    pour un parcours plus facile... Je te laisse avec l'algo qui doit être assez velu...
    Oui exactement j'avais pas le bon terme merci.

    C'est bien un arbre à feuille que je veux faire.

    pour l'algo je m'en charge. il n'est pas si compliqué que ca. si je savais implementer correctement ma struture bien sure .

    Pouvez vous me dire si ma déclaration est bonne malgrès que le debugueur ne voit q'un pointeur pointant sur la structure (au lieu d'un tableau de stucture à 2 elements) dont le champ "elt" pointe sur une autre structure (au lieu d'un tableau de stucture à 3 elements).

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par difficiledetrouver1pseudo


    Pouvez vous me dire si ma déclaration est bonne malgrès que le debugueur ne voit q'un pointeur pointant sur la structure (au lieu d'un tableau de stucture à 2 elements) dont le champ "elt" pointe sur une autre structure (au lieu d'un tableau de stucture à 3 elements).
    Celle-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct d{
     int Nb_elt;
     char* name;
     struct d **elt;
    } data;
    typedef data* design;
    Je la trouve compliquée, mal nommée et je n'aime pas qu'on cache les pointeurs.

    Un puriste absolu (pas de typedef) ferait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct leaf 
    {
       /* data */
       char* name;
     
       /* link */
       size_t count;
       struct leaf **array;
    };
    Ca me va, mais je suis d'accord aussi pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct leaf leaf_s;
     
    struct leaf 
    {
       /* data */
       char* name;
     
       /* link */
       size_t count;
       leaf_s **array;
    };
    Nota : pour size_t, include <stddef.h>

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

Discussions similaires

  1. Acceder à un pointeur tableau dans une struct
    Par france38 dans le forum Débuter
    Réponses: 1
    Dernier message: 25/09/2011, 22h19
  2. Double tableau dynamique de pointeurs de struct
    Par dedibox26 dans le forum Débuter
    Réponses: 2
    Dernier message: 27/04/2010, 15h24
  3. pointeur & tableau
    Par laurent933 dans le forum C
    Réponses: 10
    Dernier message: 10/04/2007, 00h56
  4. Pointeur, tableau et chaines de caractères.
    Par rouliane dans le forum C++
    Réponses: 8
    Dernier message: 19/12/2006, 20h27
  5. [Prob] classe + pointeur + tableau :x
    Par Saturnin123 dans le forum C++
    Réponses: 4
    Dernier message: 12/07/2006, 14h41

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