Cuando quiero finalizar la lista y salir del programa, me da este error "Unhandled exception at 0x00341459 in EJEM DOBLES.exe: 0xC0000005: Access violation reading location 0x00000004."
No encuentro que puede ser, ya que todo lo demás funciona perfecto.
Agradezco la ayuda!
Código
#include <stdio.h> #include <stdlib.h> typedef struct snodo { int data; struct snodo *ant, *sig; } tnodo; typedef tnodo *tpuntero; void insertarelemento(tpuntero *, int); int eliminarelemento(tpuntero *, int); void mostrarlista(tpuntero); int listavacia(tpuntero); void borrarlista(tpuntero*); void instruccions(void); int main() { tpuntero inicio = NULL; char choice; int item; instruccions(); while (choice != '4') { switch (choice) { case '1': else { insertarelemento(&inicio, item); } break; case '2': mostrarlista(inicio); break; case '3': if (!listavacia(inicio)) //sino esta vacia if (eliminarelemento(&inicio, item)) //si lo encontró y borró mostrarlista(inicio); } //muestra la lista luego de borrarlo else //si no lo encontro } else break; default: //si la opcion es invalida le vuelve a preguntar break; } instruccions(); } borrarlista(&inicio); return 0; } void insertarelemento(tpuntero *inicio, int valor) { tpuntero anterior, actual, nuevo; actual = *inicio; anterior = NULL; while (actual != NULL&&actual->data<valor) { anterior = actual; actual = actual->sig; } nuevo->data = valor; nuevo->ant = anterior; nuevo->sig = actual; if (anterior != NULL) { anterior->sig = nuevo; } else { *inicio = nuevo; } if (actual != NULL) { actual->ant = nuevo; } } int eliminarelemento(tpuntero *inicio, int valor) { tpuntero anterior, actual, temp; if (valor == (*inicio)->data) { temp = *inicio; *inicio = (*inicio)->sig; return valor; } else { anterior = *inicio; actual = (*inicio)->sig; while (actual != NULL&&actual->data != valor) { anterior = actual; actual = actual->sig; } if (actual != NULL) { temp = actual; anterior->sig = actual->sig; return valor; } } return 0; } void mostrarlista(tpuntero inicio) { if (inicio == NULL) else { tpuntero anterior; anterior = NULL; while (inicio != NULL) { anterior = inicio; inicio = inicio->sig; } while (anterior != NULL) { anterior = anterior->ant; } } } int listavacia(tpuntero inicio) { return inicio == NULL; } void borrarlista(tpuntero *inicio) { tpuntero nuevo, actual; actual = *inicio; while (actual->ant != NULL) { actual = actual->ant; } while (actual != NULL) { nuevo = actual; actual = actual->sig; } *inicio = NULL; } void instruccions(void) "1 Para insertar un elemento en la lista\n" "2 Para mostrar lista \n" "3 Para eliminar un elemento de la lista\n" "4 Para cerrar el programa\n"); }