Partage
  • Partager sur Facebook
  • Partager sur Twitter

qsort (pb de crash)

ss doute en rapport avec le compilateur

    8 août 2006 à 19:24:12

    Bonjour à tous,
    Je me trouve confronté avec un petit probleme de tri de tableau (plus exactement de tri d une liste).
    Le probleme est que mon programme fonctionne bien s'il est compilé sous Linux mais pas sous UNIX.
    Sous Unix au moment des comparaisons dans la fct ordonnConnection je tombe que une connection non definie. (J'ai bien verifie ma liste et tt les elements sont ok)
    Je pense donc qu'il y a qqc qui ne plait à mon compilateur SUN.

    Voila comment j'ai programme l'affaire si qq un a une idee du pourquoi ca passe pas sous SUN je suis preneur.

    merci d'avance
    andre

    /* j appelle la fct qui me permet de faire mon tri dans mon prog principal*/
    sortListe( ruban->lstConnections, ordonnConnections );

    /* et voila comment celle ci se presente avec la fct de comparaison associee*/
    void sortListe( Liste liste, CompareFn cmpFn )
    {
    current_func = cmpFn;
    qsort(liste->pObjet, liste->nbObjets, sizeof(void *), compare_func);
    } /*
    _____________________________________________________________________ */

    int ordonnConnections( Connection connec1, Connection connec2 )
    {
    if (connec1->rubanA == connec2->rubanA)
    {
    return SIGN(connec1->m - connec2->m);
    }
    else if (connec1->rubanA == connec2->rubanB)
    {
    return SIGN(connec1->m - connec2->n);
    }
    else if (connec1->rubanB == connec2->rubanB)
    {
    return SIGN(connec1->n - connec2->n);
    }
    else if (connec1->rubanB == connec2->rubanA)
    {
    return SIGN(connec1->n - connec2->m);
    }
    } /*
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2006 à 20:45:41

      Salut,

      Utilise les balises code (dans la liste déroulante) et indentes ton code :)

      /* j appelle la fct qui me permet de faire mon tri dans mon prog principal*/
      sortListe( ruban->lstConnections, ordonnConnections );



      /* et voila comment celle ci se presente avec la fct de comparaison associee*/
      void sortListe( Liste liste, CompareFn cmpFn )
      {
          current_func = cmpFn;
          qsort(liste->pObjet, liste->nbObjets, sizeof(void *), compare_func);
      } /*
      _____________________________________________________________________ */


      int ordonnConnections( Connection connec1, Connection connec2 )
      {
          if (connec1->rubanA == connec2->rubanA)
          {
              return SIGN(connec1->m - connec2->m);
          }

          else if (connec1->rubanA == connec2->rubanB)
          {
              return SIGN(connec1->m - connec2->n);
          }

          else if (connec1->rubanB == connec2->rubanB)
          {
              return SIGN(connec1->n - connec2->n);
          }

          else if (connec1->rubanB == connec2->rubanA)
          {
              return SIGN(connec1->n - connec2->m);
          }
      }


      Sinon pour ton problème, je ne vois pas ce qui ne va pas :(
      Est-ce que "ruban->lstConnections" est bien une structure de type Liste ?
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2006 à 23:03:23

        oui lstConnection est bien de type liste...
        Au debut je pensais que ca venait du fait que sous SUN si la fct de comparaison ne retourne pas -1 0 ou 1 alors pour a = b au moment ou on les compare on a +1 pour la comparaison de a avec b et de b avec a
        Ceci fait crasher l'appli sous SUN mais pas sous LINUX (sans doute du aux differences de compilateur)
        C'est plutot normal d'avoir un pb car les donnees d'entrees de qsort sont alors que a est plus grand que b et que b est aussi plus grand que --> pb

        Y'aurait il pas une autre astuce de ce genre ????
        Sinon je pense que je vais plutot apprendre a me servir des balises ;-p

        andre
        • Partager sur Facebook
        • Partager sur Twitter

        qsort (pb de crash)

        × 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