セグメンテーション違反が発生しています。それは私が比較をしている方法と関係があると思います。私は困惑していて、C++を初めて使用します。
最後の行pq.pop()
は、スタックトレースに入り、失敗の原因となる呼び出しです。./a.outを実行しても何も出力されません
class Node {
public:
Node() {}
Node(int b) {
bound = b;
}
Node(int b, Node * p) {
bound = b;
parent = p;
}
void addChild(Node& n) {
n.parent = this;
}
Node * parent;
int bound;
};
class CompareNode {
public:
bool operator()(Node *n, Node *o)
{
cout << "Comparing " << n->bound;
cout << " to " << o-> bound <<endl;
return n->bound > o->bound;
}
};
メインの下で
std::priority_queue<Node*, vector<Node*>, CompareNode> pq;
Node* root = new Node();
Node* node;
for(int i = 0; i < n; i++) {
node = new Node(matrix[0][i], root);
pq.push(node);
}
pq.pop();
GDB
(gdb) run
Program received signal SIGSEGV, Segmentation fault.
0x00000000004027e7 in void std::__pop_heap<__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode>(__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, __gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, __gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode) ()
(gdb) backtrace
#0 0x00000000004027e7 in void std::__pop_heap<__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode>(__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, __gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, __gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode) ()
#1 0x0000000000401e13 in void std::pop_heap<__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode>(__gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, __gnu_cxx::__normal_iterator<Node**, std::vector<Node*, std::allocator<Node*> > >, CompareNode)
()
#2 0x0000000000401a11 in std::priority_queue<Node*, std::vector<Node*, std::allocator<Node*> >, CompareNode>::pop() ()
#3 0x00000000004015dc in main ()