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 :

Tableau de structures dans une structure


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut Tableau de structures dans une structure
    Bonjour,

    Voila la question que je me pose, est il possible de définir une structure A et une structure B sachant que B contient, entre autre un tableau de structures A dont le nombre d'éléments n'est pas défini à la compilation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct a *A;
    struct a
    {
        int blabla;
    };
     
    typedef struct b *B;
    struct b
    {
        A *tab;
    };
    Je ne sais pas si j'ai été vraiment clair mais en fait je me pose cette question du fait que la taille de la structure B ne serait pas connue au moment de la compilation, et j'imagine que cela peut amener plusieurs erreurs par la suite ?

    Sinon, je pensais faire quelque chose comme mettre dans la structure A un pointeur vers une autre structure A afin de faire une liste chainée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct a *A;
    struct a
    {
        int blabla;
        A suivant;
    };
     
    typedef struct b *B;
    struct b
    {
        A mastructureA;
    };
    mais cela m'oblige à remonter la liste pour accéder à un élément précis, et donc j'aurais préféré trouver une autre solution.

    Merci d'avance d'avoir pris le temps de me lire,

    Adrien

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    En C tu ne peut faire que des tableaux dynamiques avec des types natifs. Tu peux éventuellement faire des tableaux statiques de structures mais il faut connaitre la taille du tableau à la déclaration.

    Pour ton cas en effet les listes chainées sont plus appropriées. Certes elles sont plus compliquées à utiliser que les tableaux mais c'est le meilleur type de conteneur pour ta situation.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    ok,
    je te remercie pour ta réponse rapide,
    ça parait logique en y réfléchissant ce que j'aurais du faire avant de passer des heures à essayer de régler mon erreur !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    En C tu ne peut faire que des tableaux dynamiques avec des types natifs.
    euh...

    Tu as tout à fait le droit de faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct mastructure * tableau_structure = malloc(nombre_elements * sizeof *tableau_structure);
    ... à moins que j'ai mal compris ce que tu voulais dire ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Voila la question que je me pose, est il possible de définir une structure A et une structure B sachant que B contient, entre autre un tableau de structures A dont le nombre d'éléments n'est pas défini à la compilation ?
    Je ne comprends pas ton code 1 par rapport à ta question. La taille des deux structures est connue à la compilation.

    Structure "a" : 1 entier "int"
    Structure "b" : 1 pointeur de pointeur sur la structure "a"

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    mmh, je me perd un peu là ;p

    Je ne suis pas très à l'aise avec les pointeurs, j'ai donc peut être fait une erreur dans ma question.

    En fait concrètement, j'ai besoin d'une structure B qui contient un tableau de n structures A, mais je ne connais pas n au moment de la compilation, j'aurais donc instinctivement tendance à penser que la taille allouée à ma structure sera fausse,

    cependant j'ai cru comprendre dans la dernière réponse que la structure ne contiendrait pas le tableau, mais l'adresse de celui ci, c'est bien ça ?

    dans ce cas ça serait donc possible, en allouant ce tableau dans la suite de mon programme ?

    EDIT :

    je précise, mon but est de pouvoir faire appel à mastructureB->tab[x]->blabla (cf le premier code dans mon post initial)

    or, dans tout ce que j'ai essayé , une erreur survient dès que j'essaie d'accéder à un autre élément de mastructureB->tab[] que mastructureB->tab[0]

    d'où mon questionnement sur l'éventuelle impossibilité d'organiser mes données de cette manière.

    Merci en tout cas à ceux qui prennent le temps de me répondre !

  7. #7
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Il faut que tu alloues la mémoire avec malloc ou calloc avant de pouvoir accéder aux cases du tableau

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Il faut que tu alloues la mémoire avec malloc ou calloc avant de pouvoir accéder aux cases du tableau
    Oui, c'est ce que j'avais fait, l'erreur doit être ailleurs

    au cas ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mastructureB->tab=malloc(n*sizeof(struct a));
    c'est bien ça ? et est il nécessaire de faire ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (i=0; i<n; i++) tab[i]=malloc(sizeof(struct a));
    Ou la première allocation suffit ?

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Déjà, dis-nous ce que tu veux faire exactement. Ca nous permettra de t'aiguiller correctement sur la manière de faire.

Discussions similaires

  1. tableau de structure dans une structure
    Par igloo2 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2013, 18h25
  2. Tableau non contraint dans une structure
    Par chronos dans le forum C
    Réponses: 8
    Dernier message: 07/06/2007, 17h44
  3. Passer une structure dans une fonction ...
    Par pilouface dans le forum C
    Réponses: 4
    Dernier message: 03/04/2006, 01h00
  4. Réponses: 6
    Dernier message: 16/02/2006, 14h40
  5. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11

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