使用向量在C++中进行分段错误

Dan*_*nor 2 c++ segmentation-fault

我遇到由以下行引起的分段错误的问题:

heapVec[currentsize] = *(new Node(d));
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

#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);
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ani 9

使用下标运算符写出其边界时,向量不会自动增长.要插入向量的末尾(增加其大小),请使用以下命令:

heapVec.push_back(Node(d));
Run Code Online (Sandbox Code Playgroud)

也不要使用*(new Node(d)),它不会段错误,但它的内存泄漏.