有人可以解释为什么这个C++代码它的行为是这样的吗?和。。将来如何避免这种"矢量"问题。
#include <iostream>
#include <vector>
using namespace std;
struct my_str {
int x;
my_str() {
x = 0;
}
void insert();
};
vector<my_str> p;
void my_str :: insert() {
p.push_back(my_str());
x = 123;
}
int main() {
p.push_back(my_str());
p[0].insert();
cerr << p[0].x;
return 0;
}
p.push_back(my_str());
void my_str :: insert()
导致向量重分配,this
无效
x = 123;
繁荣!堆损坏。
为避免将来出现此类问题,请不要从它们包含的对象编辑矢量。或者,如果必须这样做,请确保在此之后不要使用对象成员。