Partage
  • Partager sur Facebook
  • Partager sur Twitter

Allocation dynamique dans une Structure

Sujet résolu
    26 septembre 2021 à 0:42:34

    Bonjour, je suis entrain de crée un programme en C.
    Je voudrais utiliser un tableau de Struct pour stocker des info sur chacune des voitures, pour cela je doit utiliser un tableau dynamique de int dans ma struct.
    Le problème c'est que je ne vois pas comment je peut utiliser la fonction calloc() et realloc() dans une structure.
    J'ai chercher sur le net mais j'ai pas trouver, donc si qqn pourrais m'aider ou aurais une ressource je suis preneur ! Merci
    Je me réexplique pour être plus précis, j'ai donc une Structure :
    typedef struct {
            int numero;
            int *temps;
    } voiture;
    et je voudrais crée 3 tableau de cette structure, mais dans *temps je voudrais injecter dynamiquement des nombre générer par une fonction. Je pense que je dois utiliser malloc() ou calloc() et realloc() mais je ne vois pas comment je pourrais le faire.
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2021 à 1:42:32

      Que veux-tu dire par «3 tableaux»? N'est-ce pas plutôt un tableau contenant 3 structures?
      Je suggère de mettre le nombre d'éléments de ton tableau dans une variable:
      int nombre = 3;
      Tu dois d'abord faire un malloc pour réserver l'espace pour les 3 pointeurs:
      struct voiture **tableau = malloc(nombre * sizeof(struct voiture *));
      Puis:
      for(int i=0; i < nombre; i++) {
          tableau[i] = malloc(sizeof(struct voiture));
      }
      Si n=2:
      tableau[n].numero = 303;   // c'est mon numéro :)
      temps est un pointeur vers un tableau de int. C'est ce que tu veux?
      Tu devras réserver l'espace requis pour ce tableau, par exemple:
      tableau[k].temps = malloc(longueur_désirée * sizeof(int));
      tableau[k].temps[0] = 1920;

      Comment sais-tu la longueur de temps pour chaque entrée de ton tableau?
      realloc est utilisé pour modifier la longueur (augmenter ou diminuer)
      à utiliser avec prudence.
      Si tu augmentes, tu devras initialiser ce que tu n'as pas initialiser au début.
      Il faut vérifier que le malloc et le realloc ont fonctionné (pointeur retourné != NULL).
      et ne pas oublier de faire des free à la fin.

      -
      Edité par PierrotLeFou 26 septembre 2021 à 1:46:08

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        26 septembre 2021 à 8:05:51

        Malloc retourne une adresse, que l'on peut stocker dans un pointeur.

        Le pointeur peut être un membre (champ) d'une structure, aucun problème.

        voiture v;
        
        v.temps = malloc(1515 * sizeof(int));

        l'autre question, c'est comment déclarer un tableau de structures ?

        -
        Edité par michelbillaud 26 septembre 2021 à 8:16:05

        • Partager sur Facebook
        • Partager sur Twitter
          26 septembre 2021 à 8:32:53

          Bonjour @PierrotLeFou, déjà Merci beaucoup remercie pour t'as réponse 👍.

          En effet oui je voulais dire un tableau contenant 3 Structures, comme ceci :

          voiture tabStuctVoiture[3];

          Je pense que pour le 1er tableau je ne suis pas obligé d'utiliser l'allocation dynamique car je connais à l'avance le nombre dont j'aurais besoin mais par contre pour le 2eme tableau (*temps) là je suis obligé d'utiliser l'allocation dynamique car je vais générer n nombre jusqu'à x et les injecter dynamiquement dans mon *temps.


          • Partager sur Facebook
          • Partager sur Twitter

          Allocation dynamique dans une Structure

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown