"...alguien me puede decir ¿por que?..."
Porque aux1 no está definido, y como no lo inicializaste a nulo no tienes forma de hacer ninguna comprovacion de error. Cuando entras 2 y 1 se cumple que if(q->dato < aux->dato), pero ahi no asignas nada a aux1, sino que solo asignas aux1 en el siguiente else pero que en este caso no entras:
Código:
if(p==NULL){
p=q;
}
else {//en la segunda llamada entras aqui
aux = (struct nodo*)p;
if(q->dato < aux->dato) {//se cumple esto
q->siguiente=aux;
p=q;
}
else {//y no se ejecuta esto
aux=(struct nodo*)p;
while(aux->dato<q->dato&&aux->siguiente!=NULL) {
aux1=aux;//por lo tanto no asignas nada a aux1
aux=aux->siguiente;
}
}
if(aux->siguiente == NULL && aux->dato < q->dato) {
aux->siguiente = q;
}
else {//aqui aux1 contiene datos basura
aux1->siguiente = q;
q->siguiente = aux;
}
}
Saludos
vosk