El problema lo tienes en que en el resultado de quitar el ultimo nodo, el nodo resultante sigue apuntando a la direccion de memoria en que antes tenias el ultimo nodo pero que has eliminado liberando el bloque de memoria usado ok?
Código:
//cambias los punteros
UltimNode = Anterior;
//depuras
printf("Ultim node ara es %s", UltimNode->nombre);
printf("\nEl primer node ara es %s", PrimerNode->nombre);
//liberas memoria
free(Aux1);
//y quitas la asignacion anterior no valida
//lo pongo aqui al final pero tendrias que ponerlo immediatamente despues de cambiar los punteros
UltimNode->DNSseguent = NULL;
Estas asignaciones de valores nulos tienes que hacerlas siempre, en C no se hacen por si solas; de la misma forma deberias inicializar las globales 'PrimerNode' y 'UltimNode' a nulo antes de cualquier operacion para evitar que casulamente se inicien con datos basura.
Otra cosa, no mezcles cuatrocientos idiomas en el mismo codigo, o tot en catala o tot en castella o tot en angles, pero 'PrimerNode->nombre' i cosas por el estilo mejor no lo hagas.
Y una ultima cosa, creo que no te has dado cuenta de lo que hace tu funcion para imprimir nodos:
Código:
while(Temp!=NULL) {
printf("%s ->", Temp->nombre);
if(Temp==NULL) {
printf("NULL");
}
else {
Temp=Temp->DNSseguent;
}
}
Si el while se ejecuta mientras Temp no sea nulo, ¿cuando demonios se ejecuta el condicional de si Temp es nulo??
Código:
void printarLlistaDNS() {
NodeDNS *Temp = PrimerNode;
int indexNode = 0;
while(Temp) {
if(indexNode++) {
printf(" -> ");
}
printf("%s", Temp->nombre);
Temp = Temp->DNSseguent;
}
printf("\n");
}
Salut
vosk