无法访问C ++向量下的内存

时间:2012-06-15 10:30:54

标签: c++ gdb g++ stdvector

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

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 个答案:

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