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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  segmentation fault al mostrar lista simplemente ligada en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: segmentation fault al mostrar lista simplemente ligada en lenguaje C.  (Leído 1,840 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
segmentation fault al mostrar lista simplemente ligada en lenguaje C.
« en: 20 Julio 2016, 16:28 pm »

Hola, que tengan un muy buen día.
Nuevamente Danielito con algún inconveniente con lista enlazada, lo que ocurre es que si ingreso un dato o más todo bien pero si la lista está vacía me da el error que dejo en la imagen a continuación. -
   
                         

Encuentro muchos ejs., pero casi todos son sin ingreso por teclado sino con datos ingresados antes de compilar, me parece que tiene que ver conque la lista esta igualada a NULL o sea que no apunta a ninguna dirección en concreto pero no logro dar con la tecla

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. struct nodo{
  6. int dato;
  7. struct nodo *siguiente;
  8. };
  9.  
  10. struct lista{
  11. struct nodo *primero;
  12. struct nodo *ultimo;
  13. int elementos;
  14. };
  15.  
  16. void menu( void );
  17. void limpiar( void );
  18. struct lista *agregar( struct lista *L );
  19. struct nodo *crear( int dato );
  20. void mostrar( struct lista *L );
  21.  
  22. int main( void ){
  23. menu();
  24.  
  25. return 0;
  26. }
  27.  
  28.  
  29. void menu( void ){
  30. struct lista *Lista = NULL;
  31. int opc, ok, ch;
  32.  
  33.  
  34. do{
  35. do{
  36. limpiar();
  37. printf( "\n ========== Menu ==========\n" );
  38. printf(" \n 1 - Agregar\n 2 - Buscar\n 3 - Borrar\n 4 - Ordenar " );
  39. printf(" \n 5 - Total\n 6 - Finalizar\n\n Ingrese Opcion....: "  );
  40. ok = scanf( "%d", &opc ) == 1 && opc > 0 && opc <= 6;
  41. while ((ch = getchar()) != EOF && ch != '\n');
  42. }while( !ok );
  43.  
  44. switch ( opc ){
  45. case 1: Lista = agregar( Lista );
  46. break;
  47. case 2: printf("\n Buscar");
  48. break;
  49. case 3: printf("\n Borrar");
  50. break;
  51. case 4: printf("\n Ordenar");
  52. break;
  53. case 5: mostrar( Lista );
  54. break;
  55. case 6:;
  56. free(Lista);
  57. break;
  58. }
  59. }while( opc != 6 );
  60. }
  61.  
  62. void limpiar( void ){
  63. system("cls||clear");
  64. }
  65.  
  66. struct lista *agregar( struct lista *L ){
  67. int ok, ch, dto;
  68.  
  69. do{
  70. limpiar();
  71. printf( "\n Ingrese dato (mayor a 0 y menor a %d)....: ", INT_MAX );
  72. ok = scanf( "%d", &dto ) == 1 && dto >0 && dto <= INT_MAX;
  73. while ((ch = getchar()) != EOF && ch != '\n');
  74. }while( !ok );
  75.  
  76. if( L != NULL ){
  77. struct nodo *e = crear( dto );
  78. L->ultimo->siguiente = e;
  79. L->ultimo = e;
  80. L->elementos++;
  81. return L;
  82. }else{
  83. struct nodo *e = crear( dto );
  84. struct lista *l = calloc( sizeof( struct lista ), 1 );
  85. l->primero = e;
  86. l->ultimo = e;
  87. l->elementos = 1;
  88. return l;
  89. }
  90. }
  91.  
  92. struct nodo *crear( int dato ){
  93. struct nodo *e = calloc( sizeof( struct nodo), 1 );
  94. e->dato = dato;
  95. e->siguiente = NULL;
  96.  
  97. return e;
  98. }
  99.  
  100. void mostrar( struct lista *L ){
  101. struct nodo *auxiliar;
  102. int i=0;
  103. auxiliar = L->primero;
  104.  
  105. while( auxiliar != NULL ){
  106. printf( "\n %d", auxiliar->dato );
  107. auxiliar = auxiliar->siguiente;
  108. i++;
  109. }
  110. if( i == 0 ) printf( "\n La lista esta vacia..." );
  111.  
  112. printf( "\n Pulse una tecla para continuar..." );getchar();
  113. }
  114.  

Saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: segmentation fault al mostrar lista simplemente ligada en lenguaje C.
« Respuesta #1 en: 20 Julio 2016, 16:41 pm »

Valida que L no sea Null y procede pero si es NULL manda error de lista vacia


En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: segmentation fault al mostrar lista simplemente ligada en lenguaje C.
« Respuesta #2 en: 20 Julio 2016, 17:03 pm »

Hola.
Gracias, ya lo logre, juraría que en un momento lo intente de la manera que tú dices, pero algún otro error seguramente estaba cometiendo.

Código
  1. void mostrar( struct lista *L ){
  2. struct nodo *auxiliar;
  3. int i=0;
  4.  
  5. if( L != NULL ){
  6. auxiliar = L->primero;
  7. while( auxiliar != NULL ){
  8. printf( "\n %d", auxiliar->dato );
  9. auxiliar = auxiliar->siguiente;
  10. i++;
  11. }
  12. }else{
  13. printf( "\n La lista esta vacia..." );
  14. }
  15.  
  16. printf( "\n Pulse una tecla para continuar..." );getchar();
  17. }

Gracias Alberto y un abrazo.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines