Por si a alguien le sirve, el problema estaba en el bucle for
for (j=0; j<i-1; j++){
for (k=0; k<i-j-1; k++){
if ((strcmp(p[j]->zk, p[j+1]->zk)) > 0) {
aux = p[j]->zk;
p[j]->zk = p[j+1]->zk;
p[j+1]->zk = aux;
}
}
}
hay que poner una "k" donde va la "j".
for (j=0; j<i-1; j++){
for (k=0; k<i-j-1; k++){
if ((strcmp(p[k]->zk, p[k+1]->zk)) > 0) {
aux = p[k]->zk;
p[k]->zk = p[k+1]->zk;
p[k+1]->zk = aux;
}
}
}
for (j=0; j<i-1; j++){
for (k=0; k<i-j-1; k++){
if ((strcmp(p[j]->zk, p[j+1]->zk)) > 0) {
aux = p[j]->zk;
p[j]->zk = p[j+1]->zk;
p[j+1]->zk = aux;
}
}
}
hay que poner una "k" donde va la "j".
for (j=0; j<i-1; j++){
for (k=0; k<i-j-1; k++){
if ((strcmp(p[k]->zk, p[k+1]->zk)) > 0) {
aux = p[k]->zk;
p[k]->zk = p[k+1]->zk;
p[k+1]->zk = aux;
}
}
}