Priority_queue en c++ Segmentation fault

Hecam3

Hola. Estoy haciendo un programa en el cual tengo que utilizar una cola con prioridad, como me da el problema de Segmentation fault cuando trato de meter el primer elemento, y no se que hacer, a ver si alguno me podéis dar alguna solución.

Yo entiendo que Segmentation fault es un problema de punteros a memoria pero en mi caso no se como corregirlo.

Aquí dejo el código que estoy usando así a ver si alguno me podéis ayudar:

class comparador{
	public:
	bool operator()(objeto& bt1, objeto& bt2){
		if(bt1.weight()<=bt2.weight()) return true;
		else return false;
	}
};

Y aqui es donde creo y inserto elementos en la cola de prioridad.

priority_queue<objeto,vector<objeto>,comparador> lPriorityqueue;
objeto lOb(a,b);
lPriorityqueue.push(lOb);

Gracias por la ayuda

r2d2rigo

Que tal poner la especificacion de la clase objeto? Y la call stack? A la funcion operator de comparador no le falta un == o es que se te lo ha comido el foro al pegarlo?

1 respuesta
Hecam3

#2
Aquí la especificación de la clase.

class objeto{

private:
unsigned int mWeight;
char mChar;
objeto *ob1, *ob2;
public:
objeto(char,unsigned int);
objeto(objeto, objeto);
~objeto();
unsigned int weight();
void get_bit_codes(string*,string);
};

No entiendo muy bien a que te refieres con lo de que le falta un ==. Te refieres en la definición de la función?

1 respuesta
Khanser

#3

He estado jugando un poco y parece que el codigo del comparador funciona. Este es el código que he usado:

#include <string>
#include <iostream>
#include <queue> 
#include <vector>

using namespace std;

class objeto{

    private:
    unsigned int mWeight;
    public:
    objeto(){
        this->mWeight = 5;
    }
    unsigned int weight(){
        return this->mWeight;
    };
};

class comparador{
        public:
        bool operator()(objeto& bt1, objeto& bt2){
                if(bt1.weight()<=bt2.weight()) return true;
                else return false;
        }
};

int main(){
    priority_queue<objeto,vector<objeto>,comparador> lPriorityqueue;
    objeto lOb;
    lPriorityqueue.push(lOb);
}

De momento solo puedo concluir que el problema esta en la implementación de "objeto". Tampoco se si el comparador funciona bien pork me he limitado a intentar sacar el segmentation fault, y he tenido una ejecución sin problemas.
Te recomendaría que aprendieras a depurar, y depurases tu programa linea por linea. De ésta manera sabrías dónde cruje. O eso o pon 40mil printfs :D

Buffoncete

en la clase comparador no comprueba que ambos objetos puedan ser null.

Usuarios habituales

  • Buffoncete
  • Khanser
  • Hecam3
  • r2d2rigo