[C]Erreur de segmentation

Miko -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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