2016-01-02 148 views
1

列表分配空間我具有這樣的結構,如下所示:爲內部結構

struct Vertex{ 
     list<int> q; 
}; 

我創建大小10的陣列如下:

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

現在,我想在列表中插入。我很難找出爲什麼它給出了分段錯誤:

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

有人可以請解釋這裏有什麼問題嗎?

+1

爲什麼不'std :: vector ver(10);'?它會給你seg故障,因爲'malloc'不會創建對象。 – PaulMcKenzie

回答

6

malloc剛分配內存,它不會在該內存中構建任何對象。

你可以代之以

Vertex* ver = new Vertex[10]; 

初始化Vertex結構及其list成員。

一個更簡單的方法來創建10個Vertex對象是

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

這也節省了您不必delete[]對象以後的麻煩。

+0

謝謝!這工作! :) –

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);