[C]Erreur de segmentation

Fermé
Miko - 28 août 2006 à 12:31
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 29 août 2006 à 13:18
Bonjour,

je voudrais savoir pourquoi ce code produit une erreur de segmentation et comment corriger cela

Merci

void bubbleSort(char **tab, int (*cmp)(void *, void *))
{
  char **p1, **p2;
  for(p1=tab; *p1!=NULL; ++p1)
    for(p2=p1+1; *p2!=NULL; ++p2)
      if((*cmp)(p1,p2)>0)
	{
	  char *tmp;
	  tmp = *p1;
	  *p1 = *p2;
	  *p2 = tmp;
	}
}

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
29 août 2006 à 13:00
Salut.
je ne sais pas ce que tu charche à faire, mais je trouve les assignation :
*p1=*p2, assez bizard.
Tu modifies les ponteurs, mais pas les valeurs, ni leur ordre.
Je modère : je n'ai aucune formation sur les pointeur de pointeur.
peut être essayer la fonction dans un cas simple avec deux dimension...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
29 août 2006 à 13:18
Bon, j'ai testé, le swap par pointeur fonctionne très bien. (au moins j'ai appris quelques chose)
le problème viens de p2=p1+1 !
*(p1+1) peux être null des le début, et ça ça crée des erreurs.
modifie ta première boucle ainsi :$
for (p1=tab;*(p1+1)!=NULL;++p1)
0