矢量分配混乱

时间:2011-11-07 13:57:57

标签: c++ vector stack heap

我有以下类型的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对象都将在堆上分配。

对此有何想法?

1 个答案:

答案 0 :(得分:4)

使用你的小代码,我猜你的拷贝构造函数和operator =有问题。每次在向量中添加新项时,都会有一个复制调用。在指针向量的情况下,没有问题,但是对于你的类,你的指针和地图会有问题。正确实施这些方法,然后重试。