Erreur de ségmentation

Résolu
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011 - 30 mai 2009 à 23:26
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011 - 31 mai 2009 à 00:10
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

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
30 mai 2009 à 23:57
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).
3
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011
31 mai 2009 à 00:10
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
0
Rejoignez-nous