Me sigue sin funcionar, yo creo que el problema esta en el printar.
Si voy añadiendo nodos y los voy printando no hay problema, pero si luego elimino alguno y los printo todos es cuando me hace un segment fault.
Código:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "datos.h"
void afegirDNS(char dominio[20])
{
NodeDNS *Aux;
Aux=(NodeDNS *)malloc(sizeof(NodeDNS));
strcpy(Aux->nombre,dominio);
Aux->DNSseguent=NULL;
if(PrimerNode==NULL)
{
PrimerNode=Aux;
UltimNode=Aux;
}
else
{
UltimNode->DNSseguent=Aux;
UltimNode=Aux;
}
}
void printarLlistaDNS()
{
NodeDNS *Temp;
Temp=PrimerNode;
while(Temp)
{
printf("%s ->", Temp->nombre);
Temp=Temp->DNSseguent;
}
printf("NULL\n");
}
void printarprimer()
{
if (PrimerNode!=NULL)
{
printf("El primer node es: %s\n\n",PrimerNode->nombre);
}
else
{
printf("Llista buida");
}
}
void printarultim()
{
if (UltimNode!=NULL)
{
printf("El ultim node es: %s\n\n",UltimNode->nombre);
}
else
{
printf("Llista buida");
}
}
void eliminarNode(char dominio[20])
{
NodeDNS *Actual;
NodeDNS *Anterior;
Actual=PrimerNode;
Anterior=NULL;
while(Actual)
{//cicle
if(strcmp(Actual->nombre,dominio)==0)//Hemos encontrado el elemento a eliminar
if(!Anterior) //Es el primer node de la llista
{
PrimerNode=Actual->DNSseguent;
}
else
{ //Si no es el primer node
Anterior->DNSseguent = Actual->DNSseguent;
UltimNode=Anterior;
if(!strcmp(Actual->nombre, UltimNode->nombre))
{
UltimNode = Anterior;
}
}
//allibera
free(Actual);
//surt del cicle
break;
}
Anterior = Actual;
Actual = Actual->DNSseguent;
}
void main()
{
int opcion=0;
char dominio[20];
while(1)
{
printf("\n1- A");
printf("%c",164);
printf("adir DNS: \n\n");
printf("2- Printar primer element\n\n");
printf("3- Printar ultim element\n\n");
printf("4- Printar tots els elements\n\n");
printf("5- Eliminar un domini\n\n");
printf("Seleccione una opcion: ");
scanf("%d",&opcion);
printf("\n\n");
switch(opcion)
{
case 1: printf("Introdueix el nom de domini: ");
scanf("%s",dominio);
afegirDNS(dominio);
break;
case 2: printarprimer();
break;
case 3: printarultim();
break;
case 4: printf("\n");
printarLlistaDNS();
break;
case 5: printf("Introdueix el domini que vols eliminar: ");
scanf("%s",dominio);
eliminarNode(dominio);
break;
}
}
system("Pause");
}