这里的代码很简单:
$
为什么会出现运行时错误?请详细解释。
答案 0 :(得分:13)
阅读参考资料:std::vector::push_back
。特别是那部分说:
如果新
size()
大于capacity()
,则所有迭代器和引用(包括过去的迭代器)都将失效。否则只有过去的迭代器无效。
当你将第二个字符串推回到向量中时,它似乎必须重新分配内存,因为第二个字符串没有足够的容量。这种重新分配将整个矢量数据移动到内存中的其他位置 - 包括您推入其中的第一个字符串。因此,对第一个字符串的引用变为悬空引用,并且取消引用它具有未定义的行为。