Partage
  • Partager sur Facebook
  • Partager sur Twitter

qsort dans une structure

structure imbriquée

    26 mars 2019 à 9:42:22

    Bonjour

    j'ai une structure imbriquée

    typedef struct personne
    {   
    Int code
    int age;
    } personne;
    
    typedef struct pp
    {   int psize;
    personne*tab;
    } pp;
    

    le tableau tab est alloué dynamiquement comme suit 

    struct pp  p;
         p.tab= malloc((p.psize)*sizeof(personne));
    

    la fonction qsort avec sa fonction compare sont codées comme suit:

    static int compare_age (void const *a, void const *b)
    {
       struct personneconst *pa = a;
       struct personneconst *pb = b;
    
       return pa->age - pb->age;
    }
    
    
    void triPp(pp* p)
    {
    
      qsort (p->tab, sizeof p->tab / sizeof *(p->tab), sizeof *(p->tab), compare_age);
    

    est ce que c'est correct  car ça n'execute pas et j'arrive pas à comprendre ?

    merci



    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 9:52:34

      Lu'!

      sizeof(p->tab)

      Ceci ne donne pas la taille d'une zone mémoire. Là en l'occurrence, tu demandes la taille du pointeur en octets.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        26 mars 2019 à 12:59:04

        Comment faire j'ai pas compris
        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2019 à 15:38:04

          Hello,

          Le nombre d'élémens à trier, c'est p->psize, je suppose. Et la taille d'une zone mémoire, c'est sizeof(struct personne).

          L'appel est donc qsort(p->tab,p->psize,sizeof(struct personne),compare_age);

          -
          Edité par edgarjacobs 26 mars 2019 à 15:38:43

          • 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

            26 mars 2019 à 15:59:40

            void triPp(pp *p)
            {
              qsort(p->tab, p->psize, sizeof *p->tab, comparer_age);
            }
            • Partager sur Facebook
            • Partager sur Twitter

            qsort dans 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