从vector的元素成员方法插入向量元素会破坏* this

时间:2013-10-08 18:12:15

标签: c++ pointers vector push-back

有人能解释一下为什么这个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;
}

1 个答案:

答案 0 :(得分:4)

p.push_back(my_str());

中的

void my_str :: insert()

导致向量重新分配,this无效

x = 123;

BOOM!堆腐败。

为了避免将来出现此类问题,请不要编辑包含对象的向量。 或者,如果必须,请确保在此之后不使用对象成员。