Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 6 Agosto 2016, 22:06 pm



Título: Segmentation fault en programa con cola enl lenguaje C.
Publicado por: NOB2014 en 6 Agosto 2016, 22:06 pm
Hola, que tengan muy buen día. -
Repase el video de donde saque el Ej. una decena de veces y no logro hacer que el programa no me de el error  Segmentation fault, busque también en internet el error del compilador y nada.
Nota: Alberto, mil disculpas por no copiarlo de tu video que por cierto lo vi un par de veces pero este me pareció más acorde a mis conocimientos (así me fue). -
Si además de decirme como solucionarlo (cosa que descarto) si me pondrían poner un poco de teoría del porqué me seria de mucha utilidad para no repetir. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct ElementoLista{
  6. char *dato;
  7. struct ElementoLista *siguiente;
  8. }Elemento;
  9.  
  10. typedef struct ListaUbicacion{
  11. Elemento *inicio;
  12. Elemento *fin;
  13. int tamanio;
  14. }Cola;
  15.  
  16. void inicializacion_cola( Cola *serie);
  17. int insertar_cola( Cola *serie, Elemento *actual, char *dato );
  18. int quitar_cola( Cola *serie );
  19. void imprimir_cola( Cola *serie );
  20.  
  21. int main( void ){
  22. Cola *serie;
  23. inicializacion_cola( serie );
  24.  
  25. insertar_cola( serie, serie->fin, "1" );
  26. insertar_cola( serie, serie->fin, "2" );
  27. insertar_cola( serie, serie->fin, "3" );
  28. insertar_cola( serie, serie->fin, "4" );
  29. insertar_cola( serie, serie->fin, "5" );
  30. insertar_cola( serie, serie->fin, "6" );
  31. insertar_cola( serie, serie->fin, "7" );
  32. insertar_cola( serie, serie->fin, "8" );
  33. insertar_cola( serie, serie->fin, "9" );
  34.  
  35. imprimir_cola( serie );
  36.  
  37. printf( "\n" );
  38.  
  39. quitar_cola( serie );
  40. quitar_cola( serie );
  41. quitar_cola( serie );
  42. quitar_cola( serie );
  43.  
  44. imprimir_cola( serie );
  45.  
  46. return 0;
  47. }
  48.  
  49. void inicializacion_cola( Cola *serie){
  50. serie->inicio = NULL;
  51. serie->fin = NULL;
  52. serie->tamanio = 0;
  53. }
  54.  
  55. int insertar_cola( Cola *serie, Elemento *actual, char *dato ){
  56. Elemento *nuevo_elemento;
  57.  
  58. if( ( nuevo_elemento = (Elemento *)malloc( sizeof( Elemento ))) == NULL )
  59. return -1;
  60. if( (nuevo_elemento->dato = ( char * )malloc(50 * sizeof (char))) == NULL)
  61. return -1;
  62.  
  63. strcpy( nuevo_elemento->dato , dato );
  64.  
  65. if( actual == NULL ){
  66. if( serie->tamanio == 0 ){
  67. serie->fin = nuevo_elemento;
  68. }
  69. nuevo_elemento->siguiente = serie->inicio;
  70. serie->inicio = nuevo_elemento;
  71. }else if( actual->siguiente == NULL ){
  72. serie->fin = nuevo_elemento;
  73.  
  74. nuevo_elemento->siguiente = actual->siguiente;
  75. actual->siguiente = nuevo_elemento;
  76. }
  77. serie->tamanio++;
  78.  
  79. return 0;
  80. }
  81.  
  82. int quitar_cola( Cola *serie ){
  83. Elemento *sup_elemento;
  84.  
  85. if( serie->tamanio == 0 ){
  86. return -1;
  87. }
  88. sup_elemento = serie->inicio;
  89. serie->inicio = serie->inicio->siguiente;
  90.  
  91. free( sup_elemento->dato );
  92. free( sup_elemento );
  93.  
  94. serie->tamanio--;
  95. return 0;
  96. }
  97.  
  98. void imprimir_cola( Cola *serie ){
  99. Elemento *actual;
  100. int i;
  101. actual = serie->inicio;
  102.  
  103. for( i=0; i<serie->tamanio; i++ ){
  104. printf( "\n %p - %s", actual, actual->dato );
  105. actual = actual->siguiente;
  106. }
  107. }
  108.  

Citar
Program received signal SIGSEGV, Segmentation fault.
0x00000000004007d2 in inicializacion_cola (serie=0x0) at Cola.c:50
50      serie->inicio = NULL;   
Saludos.   


Título: Re: Segmentation fault en programa con cola enl lenguaje C.
Publicado por: NOB2014 en 6 Agosto 2016, 23:01 pm
Código
  1. int main( void ){
  2. Cola *serie = (Cola *)malloc( sizeof( Cola ));
  3. inicializacion_cola( serie );

Ya encontré el error. -
Saludos


Título: Re: Segmentation fault en programa con cola enl lenguaje C.
Publicado por: AlbertoBSD en 12 Agosto 2016, 17:08 pm
No te preocupes, siempre que logres aprender mas del lenguaje no importa que código uses o estudies, el punto es que aprendas.

Si ese error yo lo trato de evitar inicializando el la Cola en la misma funciona donde agrego valores, se inicializa en caso de que no este inicializada y por eso yo hago algo como:

Código
  1. Cola *serie = NULL;
  2. serie = insertar_cola( serie, "1" );
  3.  

Y en mi caso siempre los agrego al final.

Saludos!