大家好呀。
我们知道,vector 的 push_back 向末尾添加一个数。可是这个操作竟然会改变前面元素的值?实验代码如下。
#include <iostream>
#include <vector>
#include <string>
using String = std::string;
struct Type {
String name;
Type(String name): name(name) {}
};
std::vector<Type> types;
int main() {
using namespace std;
types.push_back({"@"});
Type &global = types[0];
cerr << global.name << '\n';
types.push_back({"byte"});
cerr << global.name.length() << '\n';
cerr << global.name[0] << '\n';
}
在 Linux 上,gcc 版本 14.2.1 20240805 (GCC) 时运行这段代码 (洛谷 IDE 也有类似的结果):
@
13422348455664032349
段错误(核心已转储)
一种可能是在第二次 push_back 时,添加的元素把旧的 string 覆盖了?(求解答)
也欢迎大家在自己的 Windows 电脑上测一下这段代码的输出。