1

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

1 回答 1

4

p.push_back(my_str());void my_str :: insert()

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

x = 123;

繁荣!堆损坏。

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

于 2013-10-08T18:21:05.140 回答