1

我在我的程序中使用这样的向量:

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, __x=@0x7fff5fbff330) at stl_vector.h:602
602     if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)

这里发生了什么 ?

4

4 回答 4

5

这定义了一个空向量:

vector<vector<string> > values; 

这将一个字符串推入第一个向量:

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

只是还没有第一个向量!尝试

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

等等

于 2012-06-15T10:33:24.553 回答
4

中没有元素values,这意味着这会导致越界访问:

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

您需要push_back()vector<string>values

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

values使用至少一个条目创建(请参阅向量构造函数):

vector<vector<string> > values(1);
于 2012-06-15T10:33:47.877 回答
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);
于 2012-06-15T10:40:55.100 回答
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);
于 2012-06-15T10:45:02.773 回答