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

C Discussion :

segmentation fault


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut segmentation fault
    Bonjour ,

    j'ai un problème sur le tri rapide ou quicksort.
    Ma fonction partition marche trés bien voici son prototype:

    void part(int tab[],int deb,int fin,int pivot);

    le problème est dans ma fonction qui va faire le trie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void quicksort(int tab[],int deb,int fin)
          {
                     int pivot;
                     pivot=tab[1];
                     part(tab,deb,fin,pivot);
                     quicksort(tab,deb,pivot-1);
                     quicksort(tab,pivot+1,fin);
          }
    cette fonction me donne un segmentation fault depuis 2 heures je tourne en rond , je n'arrive pas à voir d'où vient l'erreur.
    je viens vous demander à l'aide en vous remerciant d'avance.

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Il faudrait peut-être une condition de fin de récursion.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    mince j'ai oublie de mettre mon critère d'arrêt et en plus je sais lequel c'est

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void quicksort(int tab[],int deb,int fin)
    {
            int pivot;
            pivot=tab[1];
            if(deb<=fin)
            {
                    part(tab,deb,fin,pivot);
                    quicksort(tab,deb,pivot-1);
                    quicksort(tab,pivot+1,fin);
            }
    }
    voilà mon critère d'arrêt

  5. #5
    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 verazano
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void quicksort(int tab[],int deb,int fin)
    {
    <...>
                    part(tab,deb,fin,pivot);
    voilà mon critère d'arrêt
    et part() ? On est pas devins...

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Hoï,
    Citation Envoyé par Emmanuel Delahaye
    et part() ? On est pas devins...
    Si, d'ailleurs j'avais prévu que quelqu'un réagirait !!


  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    bah eux c'est ma fonction partition si vous la voulez :

    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
     
    int  part(int tab[],int deb,int fin)
    {
            int pivot;
            int g=deb;
            int d=fin;
            int p;
            pivot=tab[0];
            p=tab[pivot];
            g=g+1;
            while (g<d)
            {
                    while((g<=fin)&&(tab[g]<p))
                            g=g+1;
                    while((d>=deb)&&(tab[d]>p))
                            d=d-1;
                    if((tab[g]>tab[d])&&(g<d))
                            swap(tab,g,d);
            }
            return d;
    }
    par contre la fonction swap je crois que j'ai pas besoin de vous la donner

    Petite précision entre temps j'ai décidé de plus m'embêter du pivot et de le prendre à tab[0]
    Donc l'entrée pivot de ma fonction part et à enlever

    Si vous trouvez que j'ai un peu trop "éclaté" mes fonctions c'est normal , c'était pour essayer au maximum de clarifier mon code pour voir mon erreur

    Bon comme on dit la nuit porte conseil , je vais donc arrêter pour ce soir et demain reprendre plus tranquillement.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et si :

    1) pivot-1 est négatif
    2) pivot+ est plus grand que la dimension de ton tableau
    3) là tu raisonnes sur la VALEUR de tab. Si tab[0] ou tab[1] est < 0 ou > dimension de ton tableau ??

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    la dimension du tableau ?
    Je comprends pas très bien


    bah oui on compare la valeur du pivot et la valeur du tableau mais je vois pas trop où est le problème .

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    ayez j'ai résolu le segmentation fault

    Cela marche maintenant enfin que pour des tableaux comprenant un nombre paire de valeur . Sinon sur les tableaux comprenant un nombre impair de valeur j'ai une valeur qui n'est pas trié .

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

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    Réponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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