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 :

Allocation de tableau de structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Allocation de tableau de structure
    Bonjour,

    J'ai un petit souci de compréhension on dirait bien. Le compilateur braille en me disant :

    error: invalid type argument of '->' (have 't_armee')

    pour la fonction suivante. Les erreurs provenant des lignes surlignées de la même couleur.

    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
    t_armee *allouerArmee( int *quantite )
    {
        t_armee *armee = (t_armee*)malloc(2*sizeof(t_armee));
    
        if ( armee != NULL )
        {
            int i,j;
            for ( i=0 ; i<2 ; i++)
            {
                if ( i==0 )
                {
                    for ( j=0 ; j<quantite[i] ; j++)
                    {
                        armee[i]->peloton[j] = (t_peloton*)malloc(sizeof(t_peloton));
                    }
                }
    
                else
                {
                    for ( j=0 ; j<quantite[i] ; j++)
                    {
                        armee[i]->peloton[j] = (t_peloton*)malloc(sizeof(t_peloton));
                    }
                }
            }
        }
    
        else perror("\n allouerArmee : ");
    }
    J'aurais aimé aussi pouvoir tester l'allocation de chaque champs. Mais je ne sais pas comment m'y prendre proprement.

    Merci d'avance !

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Salut !

    armee est bien un pointeur, mais par armee[i]. D'ou l'erreur. Du dois écrire armee[i].peloton[j].

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    J'avais essayé mais cela ne marchait pas non plus !

    Toujours sur les mêmes lignes le compilateur me renvoi ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: incompatible types when assigning to type 't_peloton' from type 'struct t_peloton *'|

  4. #4
    Membre Expert
    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
    Par défaut
    Et si tu nous montrais t_peloton ?...

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Je suppose que peloton est un t_peloton alors
    ça n'est pas plutot ça que tu voulais 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
     
    t_armee *allouerArmee( int *quantite )
    {
        t_armee *armee = malloc(2*sizeof(t_armee));
     
        if ( armee != NULL )
        {
            int i;
            for ( i=0 ; i<2 ; i++)
            {            
    	armee[i].peloton = (t_peloton*)malloc(quantite[i]*sizeof(t_peloton));            
            }
        }
     
        else perror("\n allouerArmee : ");
    }
    car la tu essaye d'affecter un pointeur t_peloton a un t_peloton

  6. #6
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Non parceque chaque armée dispose de différents pelotons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* structure representant une unité */
    typedef struct
    {
        int quantite;
        int type;
        int forceUnitaire;
        int force;
    }t_peloton;
     
    /* structure representant une armée composée d'unités */
    typedef struct
    {
        t_peloton *peloton;
    }t_armee;

  7. #7
    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
    Tu n'as pas alloué de mémoire pour 'peloton' donc accéder à 'peloton[j]' revient à accéder à... n'importe où. Il te manque un malloc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    armee[i].peloton = malloc(....);
    De plus, si tu as un pointeur 'simple' et non pas un pointeur sur pointeur tu n'as pas à allouer de mémoire pour 'armee[i].peloton[j]'.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/10/2013, 17h27
  2. Allocation dynamique d'un tableau de structure
    Par TheChicken dans le forum Débuter
    Réponses: 20
    Dernier message: 12/05/2011, 17h11
  3. tableau de structure et allocation dynamique
    Par libliba dans le forum Débuter
    Réponses: 3
    Dernier message: 14/04/2011, 14h02
  4. Allocation dynamique d'un tableau de structures
    Par ryadh.naouar dans le forum C
    Réponses: 5
    Dernier message: 24/04/2008, 12h49
  5. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03

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