有人能解释一下为什么这个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;
}
答案 0 :(得分:4)
p.push_back(my_str());
中的 void my_str :: insert()
导致向量重新分配,this
无效
x = 123;
BOOM!堆腐败。
为了避免将来出现此类问题,请不要编辑包含对象的向量。 或者,如果必须,请确保在此之后不使用对象成员。