Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer un tableau de structure

    22 mars 2018 à 10:20:09

    Bonjour a tous, 

    J'ai un problème avec la création d'un tableau de structure.

    Voici ma structure : 

    typedef struct{
    	int NbUC, NbES, TA,TR, Debut;
    	int tab[]; 
    }process;

    Ensuite je rempli a la main pour le test, mon tableau de structure dont j'ai besoin :

    int Nbprocessus = 3;
    
    	process tabl[Nbprocessus];
    	tabl[0].NbUC = 3;
    	tabl[0].NbES = 2;
    	tabl[0].TA = 0;
    	tabl[0].TR = 0;
    	tabl[0].Debut = 0;
    
    	tabl[1].NbUC = 4;
    	tabl[1].NbES = 3;
    	tabl[1].TA = 0;
    	tabl[1].TR = 0;
    	tabl[1].Debut = 2;
    	
    	tabl[2].NbUC = 4;
    	tabl[2].NbES = 3;
    	tabl[2].TA = 0;
    	tabl[2].TR = 0;
    	tabl[2].Debut = 2;
    
    	tabl[0].tab[0] =2;
    	tabl[0].tab[2] =3;
    	tabl[0].tab[4] =1;
    
    	tabl[0].tab[1] =2;
    	tabl[0].tab[3] =2;
    
    	tabl[1].tab[0] =3;
    	tabl[1].tab[2] =2;
    	tabl[1].tab[4] =1;
    	tabl[1].tab[6] =2;
    
    	tabl[1].tab[1] =2;
    	tabl[1].tab[3] =3;
    	tabl[1].tab[5] =1;
    	
    	tabl[2].tab[0] =3;
    	tabl[2].tab[2] =2;
    	tabl[2].tab[4] =1;
    	tabl[2].tab[6] =2;
    
    	tabl[2].tab[1] =2;
    	tabl[2].tab[3] =3;
    	tabl[2].tab[5] =1;

    Sauf que la a la fin de ma déclaration lorsque je printf mes NbUC et NbES ils ont changés!

    Je pense que c'est un problème d'allocation sauf que je n'arrive pas à trouver comment faire.

    Quelqu'un pourrait'il m'aider SVP?

    Merci d'avance


    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2018 à 10:26:28

      Le tableau tab de la structure n'a pas de taille !

      (il est possible de le définir sans taille (tableau extensible - extensible array) mais dans ce cas il faut allouer la structure avec malloc en tenant compte de la taille que l'on veux donner au tableau).

      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2018 à 10:33:22

        Coucou,

        Il faut préciser la taille de process.tab dans la déclaration de ta structure.

        Si tu ne le précise pas c’est considéré comme un flexible array member (dans ce code en tout cas), ce qui n’est fort probablement pas ce que tu veux (c’est un truc vraiment difficile à utiliser quand on débute et qui est très peu utile).

        EDIT: Grilled…

        EDIT2: L’usage de malloc n’est pas obligatoire pour utiliser ce truc.

        -
        Edité par fscorpio 22 mars 2018 à 10:37:03

        • Partager sur Facebook
        • Partager sur Twitter
          22 mars 2018 à 10:34:14

          Tout d'abord merci de cette réponse rapide !

          Si je tente l'allocation suivante :

          tabl[0].tab = malloc(sizeof(int)*(tabl[0].NbUC+tabl[0].NbES));

          Le compilateur me donne l'erreur suivante : 
           

          invalid use of flexible array member

           tabl[0].tab = malloc(sizeof(int)*(tabl[0].NbUC+tabl[0].NbES));

          Une petite idée? ;)

          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2018 à 10:46:07

            Hello,

            Par exemple

            typedef struct{
                int NbUC, NbES, TA,TR, Debut;
                int tab[10];
            }process;

            Mais avoir des tableaux avec des nomm si similaires - tabl et tab - n'est pas un bon plan.

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              22 mars 2018 à 10:47:19

              zebu56 a écrit:

              Une petite idée? ;)

              Sérieusement, utilise pas ce truc. Ce n’est fort probablement pas ce que tu pense que c’est.

              Définis une taille pour ton tableau « int tab[42] » ou utilise un pointeur « int* tab » si tu veux l’allouer dynamiquement (comme dans ton dernier post).

              • Partager sur Facebook
              • Partager sur Twitter
                22 mars 2018 à 10:52:35

                Merci pour ta réponse fscorpio,

                je suis d'accord si je mets une valeur fixe dans la structure cela fonctionne. Mais mon soucis c'est que je ne connais pas cette valeur avant d'avoir créer mon process.

                J'avais bien essayé

                typedef struct{
                	int NbUC, NbES, TA,TR, Debut;
                	int tab[NbUC+NbES]; 
                }process;

                Mais bien sur cela ne compile pas :

                ‘NbUC’ undeclared here (not in a function)

                EDIT : merci à tous cela fonctionne avec le *tab et l'allocation dynamique ! Bonne journée à tous !!

                  int tab[NbUC+NbES];

                -
                Edité par zebu56 22 mars 2018 à 10:57:08

                • Partager sur Facebook
                • Partager sur Twitter

                Créer un tableau de structure

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown