我的结构如下:
struct Vertex{
list<int> q;
};
我创建了一个大小为10的数组,如下所示:
Vertex *ver = (Vertex*) malloc(10 * sizeof(Vertex));
现在我希望在列表中插入。我很难搞清楚为什么会出现分段错误:
ver[1].q.push_back(10);
有人可以解释一下这里有什么问题吗?
答案 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);