为List内部结构分配空间

时间:2016-01-02 09:12:38

标签: c++ stl

我的结构如下:

struct Vertex{
      list<int> q;
};

我创建了一个大小为10的数组,如下所示:

Vertex *ver = (Vertex*) malloc(10 * sizeof(Vertex));

现在我希望在列表中插入。我很难搞清楚为什么会出现分段错误:

ver[1].q.push_back(10);

有人可以解释一下这里有什么问题吗?

2 个答案:

答案 0 :(得分:5)

malloc只是分配内存,它不构造该内存中的任何对象。

你可以尝试

Vertex* ver = new Vertex[10];

执行初始化Vertex结构及其list成员。

创建10个Vertex对象的更简单方法是

std::vector<Vertex>  ver(10);

这也使您免于以后必须delete[]对象的麻烦。

答案 1 :(得分:1)

您的列表q的构造函数从未被调用过。要么使用new运算符(Vertex* ver = new Vertex[10];),要么使用std::vector<Vertex>代替Vertex*

#include <list>
#include <vector>

std::vector< std::list<int> > q(10);

如果你需要一个带有3个int类型标量的顶点数组,你应该使用它:

#include <array>
#include <vector>

std::vector< std::array<int,3> > q(10);