为什么在push_back之后会出错?

时间:2017-03-23 08:48:48

标签: c++ vector

这里的代码很简单:

$

为什么会出现运行时错误?请详细解释。

1 个答案:

答案 0 :(得分:13)

阅读参考资料:std::vector::push_back。特别是那部分说:

  

如果新size()大于capacity(),则所有迭代器和引用(包括过去的迭代器)都将失效。否则只有过去的迭代器无效。

当你将第二个字符串推回到向量中时,它似乎必须重新分配内存,因为第二个字符串没有足够的容量。这种重新分配将整个矢量数据移动到内存中的其他位置 - 包括您推入其中的第一个字符串。因此,对第一个字符串的引用变为悬空引用,并且取消引用它具有未定义的行为。