nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 octobre 2011
-
30 mai 2009 à 23:26
nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 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 ?
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 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).
nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 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