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

Bibliothèque standard C Discussion :

qsort erreur a partir de 19 elements


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut qsort erreur a partir de 19 elements
    Bonjour,
    Bon voila j'ai un tableau qui contient des strings (un ensemble de string par case)
    j'essaye de faire un qsort sur ce tableau et d'afficher les elements sous un format particulier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    qsort(copieBD_EMPRUNTS, nbEmprunts, sizeof(InfoEmprunt), methode_compare);
     
      for (i = 0; i < nbEmprunts; ++i) {
     
        strncpy(chaine1, getEmprunteur(copieBD_EMPRUNTS[i]), 10);
        strncpy(chaine2, getAuteur(copieBD_EMPRUNTS[i]), 8);
     
        sprintf(buffer, " %-11s:: [ %-9s] < %s >\n", chaine1, chaine2, getTitre(copieBD_EMPRUNTS[i]));
        ajouterDansMessage ( fluxMessages, buffer );
     
      }
    voici ma methode methode_compare qui dit comment ordonner les elements du tableau :

    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
    int methode_compare (const void* a, const void* b) {
     
      InfoEmprunt *pa = (InfoEmprunt*)a;
      InfoEmprunt *pb = (InfoEmprunt*)b;
      InfoEmprunt emprunt1 = *pa;
      InfoEmprunt emprunt2 = *pb;
      int comparaison;
     
      if (!(strcmp(getEmprunteur(emprunt1), getEmprunteur(emprunt2)))) {
     
        if (!(strcmp(getAuteur(emprunt1), getAuteur(emprunt2)))) {
     
          comparaison = strcmp(getTitre(emprunt1), getTitre(emprunt2)) > 0;
     
        }else{
     
          comparaison = strcmp(getAuteur(emprunt1), getAuteur(emprunt2)) > 0;
     
        }
     
      }else{
     
        comparaison = strcmp(getEmprunteur(emprunt1), getEmprunteur(emprunt2)) > 0;
     
      }
     
      return comparaison;
     
    }
    Le probleme est que lorsque mon tableau contient 19 elements ou plus, le qsort me renvoi un tableau vide, le getEmprunteur contient un assert qui arrete le programme parce que l'emprunt est NULL.
    Je compile avec gcc et il n'y a aucun probleme de compilation, je comprend pas pourquoi exactement 19 elements, mon tableau fait 300 de taille.
    Merci de m'aider a resoudre ce probleme, je sais pas quoi faire.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nytheouf Voir le message
    Le probleme est que lorsque mon tableau contient 19 elements ou plus, le qsort me renvoi un tableau vide, le getEmprunteur contient un assert qui arrete le programme parce que l'emprunt est NULL.
    Je compile avec gcc et il n'y a aucun probleme de compilation, je comprend pas pourquoi exactement 19 elements, mon tableau fait 300 de taille.
    La fonction de comparaison est incorrecte. Elle doit retourner ce que retourne strcmp(), c'est ) dire <0, 0 ou >0 et non 0 ou 1 comme tu le fais.

    Je te laisse corriger.

    http://emmanuel-delahaye.developpez.com/qsort.htm

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Je me sent tout bête.... Enfin, merci beaucoup de m'avoir aider, mon code marche super bien maintenant

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

Discussions similaires

  1. Instancier une Jlist à partir d'un element selectionné ?
    Par jonathanC dans le forum Débuter
    Réponses: 1
    Dernier message: 18/06/2009, 10h21
  2. Réponses: 4
    Dernier message: 11/04/2007, 11h55
  3. Débutant-Généré message erreur, a partir recordset
    Par Michel Hubert dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 11h57
  4. Liste de choix à partir d'un element actif
    Par Cablan dans le forum Access
    Réponses: 8
    Dernier message: 17/10/2005, 17h17
  5. Réponses: 6
    Dernier message: 02/06/2005, 12h44

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