Erreur de ségmentation [Résolu]

Signaler
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011
-
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011
-
Bonjour,
en essayant d'executer la fonction suivante :

/* tri par selection */
void selection(int *array,int dimension)
{
int i,j,pmin;
printf("Debug : %d ",*array);
for(i = 0;i < (dimension-1);i++)
   {
   pmin = i;
   for(j = i+1;i<dimension;j++)
      {
       if(*(array+j) < *(array+pmin))
           {
            pmin = j;
           }      
       }   
   if(pmin != i) //si ça change durant la boucle, permuter.
        permuter(array+pmin,array+i);         
   
    }
}

je recois un "erreur de segmentation", ce qui veut dire une violation d'accès sur la mémoire, or array+j, appartient à mon programme non ?

merci d'avance

2 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Essaye de te relire, ton erreur est très bête ^^

for(j = i+1;i<dimension;j++)
Tu as simplement oublié de remplacer i par j dans la condition d'arrêt. Étant donné que i ne varie pas lors de la boucle, si la condition est vérifiée une fois (ce qui est le cas) alors elle le restera et tu bloucle alors a l'infini ... ou presque vu que tu déborde en mémoire (et pan, SIGSEGV :p).
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011

J'ai vu ça, dans le for que tu as réecrit xD
quel est bête mon erreur ... oui c'est bien j qu'il faut vérifier ... sinon boucle infini puisque le i est planqué au zéro,

je pense que c'est juste parceque je suis un peu fatigué, mais bon, merci beaucoup