2012-06-15 85 views
1

我用我的程序載體是這樣的:無法訪問存儲在C++矢量

vector<vector<string> > values; 
values[0].push_back("test words"); 

當我運行的代碼,它顯示「段故障」

然後我嘗試gdb它和我得到這個:

Program received signal EXC_BAD_ACCESS, Could not access memory. 
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008 
0x00000001000035be in std::vector<std::string, std::allocator<std::string> >::push_back (this=0x0, [email protected]) at stl_vector.h:602 
602  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 

這是怎麼回事?

回答

4

有在values沒有元素,這意味着這導致越界訪問:

values[0].push_back("test words"); 

您需要push_back()vector<string>values

values.push_back(vector<string>()); 
values[0].push_back("test words"); 

or create values有至少一個條目(請參閱vector constructors):

vector<vector<string> > values(1); 
+0

THX,但我認爲當我創建載體將初始化。 – MrROY

+0

@MrROY,它會自行初始化,但不會插入默認元素。 – hmjd

5

這定義向量的空載體:

vector<vector<string> > values; 

這推動字符串轉換成第一向量:

values[0].push_back("test words"); 

只是沒有第一向量呢!嘗試

vector<string> v; 
values.push_back(v); 
values[0].push_back("test words"); 

0
values[0].push_back("test words"); 

在這裏,您試圖訪問索引0不存在。因此,你越來越

Program received signal EXC_BAD_ACCESS, Could not access memory. 

你可以這樣做,爲簡單起見。

vector<string> v; 
vector<vector<string> > values; 
v.push_back("test words"); 
values.push_back(v); 
0

values[0].push_back("test words");

我想你的意思是插入一個字符串到這是在values載體,它是向量的一個向量的第一個元素。但內部向量尚未初始化。

試試這個:

vector<vector<string> > values; 
vector<string> string_vector; 
string_vector.push_back("test words"); 
values.push_back(string_vector);