【发布时间】:2013-12-18 23:47:12
【问题描述】:
class Edge;
class Node
{
public:
Node(): distance(numeric_limits<double>::infinity()), visited(false) {}
Node(string a_id): distance(numeric_limits<double>::infinity()), visited(false), id(a_id) {}
bool operator==(const Node& p) {return p.id == id; }
string id;
double distance;
bool visited;
string previous;
vector<Edge*> edges;
};
class Edge
{
public:
Edge(double weight, string id)
{
this->weight = weight;
dest = new Node(id);
}
double weight;
Node * dest;
};
class Comparator {
public:
bool operator()(const Node* a, const Node* b)
{
return (a->distance > b->distance);
}
};
这些是我的课。我从节点指针向量创建了一个优先级队列:
priority_queue<Node*, vector<Node*>, Comparator > queue;
但是经过一些操作后,我得到了分段错误。
queue.push(nodes[0]);
queue.pop();
queue.push(nodes[1]);
queue.push(nodes[4]);
queue.pop();
queue.push(nodes[3]);
queue.push(nodes[5]);
queue.pop();
queue.push(nodes[6]);
queue.push(nodes[7]);
nodes[6]->distance=1;
queue.pop();
在最后一行
queue.pop();
我遇到了分段错误,但我不明白它为什么会发生。提前致谢。
【问题讨论】:
-
您不应该改变优先级队列的内容。特别是不涉及确定元素之间的相对优先级的任何内容。换句话说,不要这样做:
nodes[6]->distance=1; -
分段错误通常是内存损坏,并且可能发生在远离错误的地方。您的代码可能在别处有误。
-
谁清理 Node.edges?
标签: c++ pointers segmentation-fault priority-queue