迭代器和向量的 Seg 错误

Posted

技术标签:

【中文标题】迭代器和向量的 Seg 错误【英文标题】:Seg fault with iterators and vectors 【发布时间】:2012-09-20 02:36:24 【问题描述】:

我似乎在使用迭代器在向量中显示项目时遇到问题。可能,我只需要另一双眼睛来看看它。

vector<string> tempVector;
vector<string>::iterator it;


it = tempVector.begin();
tempVector.push_back("1");
cout << *it;

我知道这不是完整的代码,但它是唯一运行的部分。输出是段错误。迭代器不是指向向量的开头吗?我原以为 cout 会得到“1”。

【问题讨论】:

【参考方案1】:

如果碰巧需要重新分配,对 vector::reserve() 的调用会使所有现有迭代器失效。

引用 C++ 标准,23.3.6.3[vector.capacity]

当且仅当当前容量小于reserve() 的参数时,此时才会发生重新分配。 [...] 重新分配会使所有引用序列中元素的引用、指针和迭代器失效。

编辑:编辑后,您可以调用vector::push_back(),如果需要重新分配,它也会使所有迭代器无效。 Iterator invalidation rules 可能会有所帮助。

【讨论】:

@ChrisHarris,“使所有迭代器无效”意味着如果您尝试使用之前创建的迭代器,您可能会出现段错误。

以上是关于迭代器和向量的 Seg 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用迭代器和向量的插入排序实现

迭代器和生成器

迭代器和生成器

“向量擦除迭代器超出范围”错误

迭代器和生成器

操作数“=”和“!=”的向量错误迭代器