Segmentation fault en programa con cola enl lenguaje C.

Iniciado por NOB2014, 6 Agosto 2016, 22:06 PM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

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. -

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct ElementoLista{
char *dato;
struct ElementoLista *siguiente;
}Elemento;

typedef struct ListaUbicacion{
Elemento *inicio;
Elemento *fin;
int tamanio;
}Cola;

void inicializacion_cola( Cola *serie);
int insertar_cola( Cola *serie, Elemento *actual, char *dato );
int quitar_cola( Cola *serie );
void imprimir_cola( Cola *serie );

int main( void ){
Cola *serie;
inicializacion_cola( serie );

insertar_cola( serie, serie->fin, "1" );
insertar_cola( serie, serie->fin, "2" );
insertar_cola( serie, serie->fin, "3" );
insertar_cola( serie, serie->fin, "4" );
insertar_cola( serie, serie->fin, "5" );
insertar_cola( serie, serie->fin, "6" );
insertar_cola( serie, serie->fin, "7" );
insertar_cola( serie, serie->fin, "8" );
insertar_cola( serie, serie->fin, "9" );

imprimir_cola( serie );

printf( "\n" );

quitar_cola( serie );
quitar_cola( serie );
quitar_cola( serie );
quitar_cola( serie );

imprimir_cola( serie );

return 0;
}

void inicializacion_cola( Cola *serie){
serie->inicio = NULL;
serie->fin = NULL;
serie->tamanio = 0;
}

int insertar_cola( Cola *serie, Elemento *actual, char *dato ){
Elemento *nuevo_elemento;

if( ( nuevo_elemento = (Elemento *)malloc( sizeof( Elemento ))) == NULL )
return -1;
if( (nuevo_elemento->dato = ( char * )malloc(50 * sizeof (char))) == NULL)
return -1;

strcpy( nuevo_elemento->dato , dato );

if( actual == NULL ){
if( serie->tamanio == 0 ){
serie->fin = nuevo_elemento;
}
nuevo_elemento->siguiente = serie->inicio;
serie->inicio = nuevo_elemento;
}else if( actual->siguiente == NULL ){
serie->fin = nuevo_elemento;

nuevo_elemento->siguiente = actual->siguiente;
actual->siguiente = nuevo_elemento;
}
serie->tamanio++;

return 0;
}

int quitar_cola( Cola *serie ){
Elemento *sup_elemento;

if( serie->tamanio == 0 ){
return -1;
}
sup_elemento = serie->inicio;
serie->inicio = serie->inicio->siguiente;

free( sup_elemento->dato );
free( sup_elemento );

serie->tamanio--;
return 0;
}

void imprimir_cola( Cola *serie ){
Elemento *actual;
int i;
actual = serie->inicio;

for( i=0; i<serie->tamanio; i++ ){
printf( "\n %p - %s", actual, actual->dato );
actual = actual->siguiente;
}
}


CitarProgram received signal SIGSEGV, Segmentation fault.
0x00000000004007d2 in inicializacion_cola (serie=0x0) at Cola.c:50
50      serie->inicio = NULL;   
Saludos.   
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.-

NOB2014

int main( void ){
Cola *serie = (Cola *)malloc( sizeof( Cola ));
inicializacion_cola( serie );


Ya encontré el error. -
Saludos
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

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:


Cola *serie = NULL;
serie = insertar_cola( serie, "1" );


Y en mi caso siempre los agrego al final.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW