列表分配空間我具有這樣的結構,如下所示:爲內部結構
struct Vertex{
list<int> q;
};
我創建大小10的陣列如下:
Vertex *ver = (Vertex*) malloc(10 * sizeof(Vertex));
現在,我想在列表中插入。我很難找出爲什麼它給出了分段錯誤:
ver[1].q.push_back(10);
有人可以請解釋這裏有什麼問題嗎?
列表分配空間我具有這樣的結構,如下所示:爲內部結構
struct Vertex{
list<int> q;
};
我創建大小10的陣列如下:
Vertex *ver = (Vertex*) malloc(10 * sizeof(Vertex));
現在,我想在列表中插入。我很難找出爲什麼它給出了分段錯誤:
ver[1].q.push_back(10);
有人可以請解釋這裏有什麼問題嗎?
malloc
剛分配內存,它不會在該內存中構建任何對象。
你可以代之以
Vertex* ver = new Vertex[10];
這不初始化Vertex
結構及其list
成員。
一個更簡單的方法來創建10個Vertex
對象是
std::vector<Vertex> ver(10);
這也節省了您不必delete[]
對象以後的麻煩。
謝謝!這工作! :) –
您的列表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);
爲什麼不'std :: vector ver(10);'?它會給你seg故障,因爲'malloc'不會創建對象。 –
PaulMcKenzie