这里的代码很简单:

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/

10-11 21:17