这里的代码很简单:
int main() {
vector<string> v;
v.push_back("hello");
string& x = v[0];
v.push_back("world");
cout << x << endl;
return 0;
}
为什么会出现运行时错误?请详细解释。
最佳答案
通读参考文献:std::vector::push_back
。具体说一下:
如果新的size()
大于capacity()
,则所有迭代器和引用(包括过去的迭代器)均无效。否则,只有过去的迭代器是无效的。
当您将第二个字符串推回向量中时,似乎必须重新分配内存,因为第二个字符串没有足够的容量。这种重新分配将整个矢量数据移动到了内存中的其他位置-包括您压入其中的第一个字符串。因此,对该第一个字符串的引用变成了悬空引用,并且取消引用它具有未定义的行为。
关于c++ - 为什么在push_back之后会出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42971105/