Implementacion de una COLA en C, Error de ejecucion

Iniciado por ianmorar03, 14 Abril 2020, 04:02 AM

0 Miembros y 2 Visitantes están viendo este tema.

ianmorar03

Buenas, alguien me podria ayudar con este error, que significa? Busque en la web y revise mi codigo y todo esta bien, no entiendo mucho C, estoy empezando. Estoy programando en Linux, con consola, no se si alguien me pudiera ayudar, el error es el siguiente:

"Segmentation fault (core dumped)"

Estoy implementando una "Cola" (FIFO). El codigo compila sin errores, pero a la hora de ejecutarlo me muestra ese mensaje. Encontre que el problema esta en la funcion "enqueue", pero no se como solucionarlo, aqui la funcion:


void enqueue(int p, bool t){
   struct Nodo *temp;
   temp=malloc(sizeof(struct Nodo));
   temp->carro->placa = p;
   temp->carro->tipo = t;
   temp->sig=NULL;
   if (head == NULL){
       head = temp;
       tail = temp;
   }
   else{
       tail->sig = temp;
       tail = temp;
   }
}


Si alguien me pudiera ayudar seria genial.
Gracias de antemano.
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

fary

¿Quizás así?

void enqueue(int p, bool t){
    struct Nodo *temp;
    temp=malloc(sizeof(struct Nodo));
    temp->carro.placa = p;
    temp->carro.tipo = t;
    temp->sig=NULL;
    if (head == NULL){
        head = temp;
        tail = temp;
    }
    else{
        tail->sig = temp;
        tail = temp;
    }
}


saludos.
Un byte a la izquierda.

RayR

Dado que usas el operador de flecha con carro y tu código compila sin errores, ese miembro es un puntero, pero no estás reservando memoria para él. Haz eso y debería solucionarse tu problema.

ianmorar03

Cita de: RayR en 14 Abril 2020, 16:42 PM
Dado que usas el operador de flecha con carro y tu código compila sin errores, ese miembro es un puntero, pero no estás reservando memoria para él. Haz eso y debería solucionarse tu problema.

Efectivamente RayR, el problema se soluciona reservando la memoria para el carro, dado que es un problema de Segmentacion, no se puede acceder a esa parte en memoria por que no existe, a diferencia de C++ los punteros no trabajan de la misma manera en C.
Gracias por sus aportes.
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.