Originariamente inviato da oregon
La swap deve essere

codice:
void swap(char **a, char **b)
{
     char *papp;

     papp=*a;
     *a=*b;
     *b=papp;
}
Controlla tu il perche' ...
*a dovrebbe indicare il contenuto del puntatore (il valore a cui punta), ma
papp=*a; non dovrebbe voler dire fai puntare papp al contenuto di a? Non si dovrebbe fare o papp=a; oppure *papp=*a ?