为什么push_back后会出错
why does it go wrong after push_back?
这里的代码很简单:
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()
则所有迭代器和引用(包括过去结束迭代器(都将失效。否则,只有过去结束迭代器失效。
当您将第二个字符串推回向量时,它似乎必须重新分配内存,因为没有足够的容量来容纳第二个字符串。这种重新分配将整个矢量数据移动到内存中的其他位置 - 包括您推送到其中的第一个字符串。因此,对第一个字符串的引用变成了悬而未决的引用,取消引用它具有未定义的行为。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- C2039字符串成员函数.pop_back()和.back()出错