Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/02/2013, 16:16
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Printar lista enlazada

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