Partage
  • Partager sur Facebook
  • Partager sur Twitter

allocation dynamique sur une structure

    2 mars 2006 à 16:02:49

    Bonjour à tout le monde !

    Après avoir lu le chapitre " l'allocation dynamique " j'ai voulu essayer ce code :

    EDIT : code UN PEU corrigé

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    typedef struct Amis Amis;
    struct Amis
    {
        char prenom[50];
        char age;
    };


    int main(int argc, char *argv[])
    {
        int nAmis = 0, i ;
        Amis *mesAmis;


        printf("combien avez-vous d'amis ? :");
        scanf("%d",&nAmis);

        if(nAmis > 0)
        {


            mesAmis = malloc(nAmis * sizeof(Amis));

            if(mesAmis = NULL)
            {
                    exit(0);
            }
            for(i = 0; i < nAmis;i++)
            {
                    printf("quel est le prenom de votre ami n° %d ? : ",i + 1);
                    scanf("%s",mesAmis[i].prenom);

                    printf("quel age a voter ami n° %d ? : ", i + 1);
                    scanf("%d",&mesAmis[i].age);
            }

            for(i = 0; i < nAmis;i++)
            {
                    printf("votre ami n° %d s'appelle %s et il a %d ans\n",i + 1,mesAmis[i].prenom,mesAmis[i].age);
            }
            free(mesAmis);
        }

        else
        {
                printf("\n\nahahah vous n'avez meme pas UN ami mouahahahaha\n\n");
        }

        system("PAUSE");
        return 0;
    }



    maintenant l'erreur est après avoir entré le prenom dela première personne il me met : fichier a rencontré un problème et doit fermer.

    @louisclem : avec les -> ça ne marche pas !

    merci à ceux qui peuvent m'aider !
    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2006 à 16:53:33

      ton code ne peux pas marcher c'est sur.

      Déjà tu alloc mal la mémoire pour mesAmis, mesAmis est un pointeur vers _une_ structure, donc c'est sizeof(Amis).
      Ensuite, comme je l'ai dit, mesAmis pointe sur un seul structure, donc c'est pas possible d'initialiser plusieurs amis.

      Puis après ton code part en live :D
      Je comprend à peu près ce que tu veux faire, mais déjà je t'explique tes erreurs.
      tu essaye d'initialiser prenom[i], alors que prenom est initialisé en tant que string, donc prenom n'est pas un tableau de string, et prenom[i] est un char, pas un string.

      idem pour age.

      Si tu veux créer un tableau de structure, tu doit faire qqch du genre:

      Amis **mesAmis;

      /* obtention du nombre d'amis ... */

      mesAmis = malloc(sizeof(Amis *) * nombre_amis);

      /* alloue la mémoire pour chaque struct */
      for (i = 0; i < nombre_amis; i++)
          mesAmis[i] = malloc(/* je te laisse trouver quand meme ... */);


      enfin, je veux pas te donner la réponse, mais c'est à peu près dans le genre :p

      ensuite, pour initialiser les structs, faut utiliser mesAmis[i].element et non mesAmis.element[i].
      voila.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        2 mars 2006 à 17:03:31

        Hum je suis pas trop d'accord avec drexil :-° voici ce que je propose :

        En fait il n'y a que deux choses pas bonnes : le malloc et l'accès aux membres.

        Dans le malloc, il faut lui demander d'allouer le nombre d'amis multiplié par la taille d'une structure, donc ça donne :
        mesAmis = malloc (nAmis * sizeof (Ami));


        Ensuite, comme tu as un pointeur, tu accès aux membres par -> et tu mets l'accès au tableau avant, ce qui donne :
        scanf ("%s", mesAmis[i]->prenom);
        scanf ("%d", &mesAmis[i]->age);

        printf("votre ami n° %d s'appelle %s et il a %d ans\n", i + 1, mesAmis[i]->prenom, mesAmis[i]->age);

        ps : si il y a une erreur, c'est que je n'ai aps encore lu le chapitre :-°;)
        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2006 à 17:21:59

          regardez l'edit du premier message ;) !
          • Partager sur Facebook
          • Partager sur Twitter

          allocation dynamique sur une 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