我遇到了一个由以下代码行引起的分段错误问题:
heapVec[currentsize] = *(new Node(d));
我在这里做错了什么?
#include <vector>
using namespace std;
class Node {
private:
int data;
public:
Node(int);
// ~Node();
};
class Heap {
private:
vector<Node> heapVec;
int currentsize;
public:
Heap();
// ~Heap();
void insert(int);
void extractMin();
void reduceKey();
};
Node::Node(int d) {
data = d;
}
void Heap::insert(int d) {
heapVec[currentsize] = *(new Node(d));
currentsize++;
}
Heap::Heap() {
// this is the default constructor
currentsize = 0;
}
int main() {
Heap *h = new Heap;
h->insert(10);
}
*(new Node(d))
是完全错误的。它分配了类Node的对象,但忘记了指针。这是内存泄漏的定义。您必须将vector<Node> heapVec;
更改为vector<Node*> heapVec;
或使用类似于boost::ptr_vector<Node> heapVec;
的东西。 - Arpegiuscurrentsize
是多余的。当您想要知道当前大小时,只需使用heapVec.size()
即可。 - Robᵩ