Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ianmorar03 en 14 Abril 2020, 04:02 AM

Título: Implementacion de una COLA en C, Error de ejecucion
Publicado por: ianmorar03 en 14 Abril 2020, 04:02 AM
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.
Título: Re: Implementacion de una COLA en C, Error de ejecucion
Publicado por: fary en 14 Abril 2020, 07:44 AM
¿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.
Título: Re: Implementacion de una COLA en C, Error de ejecucion
Publicado por: 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.
Título: Re: Implementacion de una COLA en C, Error de ejecucion
Publicado por: ianmorar03 en 15 Abril 2020, 00:57 AM
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.