我在我的程序中使用了这样的矢量:
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)
这里发生了什么?
答案 0 :(得分:5)
这定义了一个向量的空向量:
vector<vector<string> > values;
将字符串推入第一个向量:
values[0].push_back("test words");
只有没有第一个载体!尝试
vector<string> v;
values.push_back(v);
values[0].push_back("test words");
等
答案 1 :(得分: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 constructors):
vector<vector<string> > values(1);
答案 2 :(得分: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);
答案 3 :(得分: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);