gpt4 book ai didi

C++ 运行时对象指针的优先级队列错误为无效堆

转载 作者:行者123 更新时间:2023-11-28 06:59:54 25 4
gpt4 key购买 nike

我已经尝试用 C++ 实现优先级队列大约 5 个小时了。

我不相信我的比较器仿函数正在做它应该做的事,但对于我的生活我无法弄清楚为什么。

在我的 Node 类的底部有一个 struct CompareNode,Node 类有一个返回 int 成员变量的函数。

 class Node
{
public:
Node();
~Node();
Node(const Node &obj);

int GetX() const { return x; }
int GetY() const { return y; }
int GetG() const { return g; }
int GetH() const { return h; }
int GetF() const { return f; }
int GetTerrainPenalty() const { return terrainPenalty; }
bool GetOpenList() const { return openList; }
bool GetClosedList() const { return closedList; }
Node* GetParentNode() const { return parentNode; }
std::vector<Node*> const GetNeighbours() { return neighbours; }

void SetX(int x) { this->x = x; }
void SetY(int y) { this->y = y; }
void SetG(int g) { this->g = g; }
void SetH(int h) { this->h = h; }
void SetF(int f) { this->f = f; }
void SetTerrainPenalty(int t) { this->terrainPenalty = t; }
void SetOpenList(bool b) { this->openList = b; }
void SetClosedList(bool b) { this->closedList = b; }
void SetParentNode(Node* n) { this->parentNode = n; }
void SetNeighbours(std::vector<Node*> n) { this->neighbours = n; }

void AddNeighbour(Node* n) { neighbours.push_back(n); }

// Manahattan Distance
void CalculateH(Node* end);
void CalculateF();

private:
int x;
int y;
int g;
int h;
int f;
int terrainPenalty;
bool openList;
bool closedList;
Node* parentNode;
std::vector<Node*> neighbours;

};

struct CompareNode
{
bool operator()(const Node* lhs, const Node* rhs) const
{
return lhs->GetF() < rhs->GetF();
}
};

在我的 main.cpp 中,我声明了优先级队列。

 std::priority_queue<Node*, std::vector<Node*>, CompareNode> openList;

我收到调试断言失败错误,无效堆。

在调试时,当我调用 openList.top() 时,它似乎没有返回正确的节点。

知道我做错了什么吗?

最佳答案

我的心理调试能力告诉我,由于您没有为您的 Node 实现复制构造函数,所以您不小心将它复制到某个地方,导致了双重删除。

关于C++ 运行时对象指针的优先级队列错误为无效堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22641762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com