elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA! Urgente LISTAS ENLAZADAS DOBLES
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA! Urgente LISTAS ENLAZADAS DOBLES  (Leído 1,709 veces)
dmon1

Desconectado Desconectado

Mensajes: 6


Ver Perfil
AYUDA! Urgente LISTAS ENLAZADAS DOBLES
« en: 17 Abril 2015, 06:01 am »

Gente, tengo un pequeño gran problema con este programa.

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct snodo
  5. { int data;
  6. struct snodo *ant, *sig;
  7. } tnodo;
  8.  
  9. typedef tnodo *tpuntero;
  10.  
  11. void insertarelemento(tpuntero *, int);
  12. int eliminarelemento(tpuntero *, int);
  13. void mostrarlista(tpuntero);
  14. int listavacia(tpuntero);
  15. void borrarlista(tpuntero*);
  16. void instruccions(void);
  17.  
  18. int main()
  19. { tpuntero inicio = NULL;
  20. char choice;
  21. int item;
  22.  
  23. instruccions();
  24. fflush(stdin);
  25. scanf("%c", &choice);
  26. while (choice != '4')
  27. { switch (choice)
  28. { case '1':
  29. printf("Ingrese un elemento a la lista\n");
  30. fflush(stdin);
  31. if (scanf("%d", &item) != 1)
  32. { printf("Error, debe ingresar un numero\n"); }
  33. else
  34. { insertarelemento(&inicio, item); }
  35. break;
  36. case '2':
  37. mostrarlista(inicio);
  38. break;
  39. case '3':
  40. if (!listavacia(inicio)) //sino esta vacia
  41. { printf("Escriba el elemento que quiera eliminar\n");
  42. fflush(stdin);
  43. scanf("%d", &item);
  44.  
  45. if (eliminarelemento(&inicio, item)) //si lo encontró y borró
  46. { printf("El elemento %d fue eliminado\n", item);
  47. mostrarlista(inicio); }  //muestra la lista luego de borrarlo
  48. else    //si no lo encontro
  49. { printf("Elemento no encontrado\n\n", item); }
  50. }
  51. else
  52. { printf("La lista esta vacia\n"); }
  53. break;
  54. default:         //si la opcion es invalida le vuelve a preguntar
  55. printf("Opcion invalida \n");
  56. break;
  57. }
  58. instruccions();
  59. fflush(stdin);
  60. scanf("%c", &choice);
  61. }
  62. printf("FIN DEL PROGRAMA");
  63. borrarlista(&inicio);
  64. return 0;
  65. }
  66. void insertarelemento(tpuntero *inicio, int valor)
  67. {
  68. tpuntero anterior, actual, nuevo;
  69. actual = *inicio;
  70. anterior = NULL;
  71. while (actual != NULL&&actual->data<valor)
  72. { anterior = actual;
  73. actual = actual->sig; }
  74. nuevo = (tpuntero)malloc(sizeof(tnodo));
  75. nuevo->data = valor;
  76. nuevo->ant = anterior;
  77. nuevo->sig = actual;
  78.  
  79. if (anterior != NULL)
  80. { anterior->sig = nuevo; }
  81. else
  82. { *inicio = nuevo; }
  83. if (actual != NULL)
  84. { actual->ant = nuevo; }
  85. }
  86.  
  87. int eliminarelemento(tpuntero *inicio, int valor)
  88. {
  89. tpuntero anterior, actual, temp;
  90.  
  91. if (valor == (*inicio)->data)
  92. { temp = *inicio;
  93. *inicio = (*inicio)->sig;
  94. free(temp);
  95. return valor; }
  96. else
  97. { anterior = *inicio;
  98. actual = (*inicio)->sig;
  99.  
  100. while (actual != NULL&&actual->data != valor)
  101. { anterior = actual;
  102. actual = actual->sig; }
  103. if (actual != NULL)
  104. { temp = actual;
  105. anterior->sig = actual->sig;
  106. free(temp);
  107. return valor; }
  108. }
  109. return 0;
  110. }
  111.  
  112. void mostrarlista(tpuntero inicio)
  113. {
  114. if (inicio == NULL)
  115. printf("La lista esta vacia\n");
  116. else
  117. {
  118. tpuntero anterior;
  119. anterior = NULL;
  120. puts("IDA");
  121. while (inicio != NULL)
  122. {
  123. printf("%2d", inicio->data);
  124. anterior = inicio;
  125. inicio = inicio->sig;
  126. }
  127. printf("\n");
  128.  
  129. puts("REGRESO");
  130. while (anterior != NULL)
  131. {
  132. printf("%2d", anterior->data);
  133. anterior = anterior->ant;
  134. }
  135. printf("\n");
  136. }
  137. }
  138.  
  139. int listavacia(tpuntero inicio)
  140. { return inicio == NULL; }
  141.  
  142. void borrarlista(tpuntero *inicio)
  143. {
  144. tpuntero nuevo, actual;
  145. actual = *inicio;
  146. while (actual->ant != NULL)
  147. { actual = actual->ant; }
  148. while (actual != NULL)
  149. {
  150. nuevo = actual;
  151. actual = actual->sig;
  152. free(nuevo);
  153. }
  154. *inicio = NULL;
  155. }
  156.  
  157. void instruccions(void)
  158. { printf("Elija su opcion:\n"
  159. "1 Para insertar un elemento en la lista\n"
  160. "2 Para mostrar lista  \n"
  161. "3 Para eliminar un elemento de la lista\n"
  162. "4 Para cerrar el programa\n"); }
  163.  


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar programa a Listas Enlazadas (C++)! Urgente!
Programación C/C++
1antares1 2 5,221 Último mensaje 28 Junio 2010, 10:02 am
por Eternal Idol
aclaracion de listas dobles enlazadas
Programación C/C++
josue_tux 2 3,981 Último mensaje 15 Marzo 2011, 14:41 pm
por Don Pollo
ayuda con listas enlazadas en c++!!!!
Programación C/C++
guanaco112 3 4,115 Último mensaje 2 Marzo 2012, 14:18 pm
por rir3760
Ayuda con listas dobles Enlazadas
Programación C/C++
larezaka 3 3,221 Último mensaje 1 Julio 2012, 17:02 pm
por larezaka
Ayuda con Formularios con listas Dobles
PHP
larezaka 0 1,766 Último mensaje 7 Octubre 2012, 16:52 pm
por larezaka
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines