我有以下类型的Tree类
class Tree{
private:
Node *root; // trie root node
unordered_map<int, vector<Node*> > *index;
unsigned long long size;
int count;
public:
................
};
我有一个以下类型的矢量
vector<Tree> vect;
通过上述声明,当每个树都添加了许多节点时,我遇到了分段错误。
但是当我使用以下声明
时,同样完美vector<Tree*> vect;
使用new
在堆上显式分配每个Tree *指针由于堆栈的内存利用率过高,分段错误似乎就好了。
根据堆栈溢出中的上一个问题,我被告知在第一个声明中,每个Tree对象都将在堆上分配。
对此有何想法?
答案 0 :(得分:4)
使用你的小代码,我猜你的拷贝构造函数和operator =有问题。每次在向量中添加新项时,都会有一个复制调用。在指针向量的情况下,没有问题,但是对于你的类,你的指针和地图会有问题。正确实施这些方法,然后重试。