不能在std向量中获取元素的指针

时间:2013-10-04 13:38:16

标签: c++ vector std stdvector

我的std :: vector

有问题
class myType
{
    int i;
};

int main()
{
    myType a1;
    myType a2;
    std::vector<myType> V;
    V.push_back(a1);
    myType* a1ptr = &V.back();
    V.push_back(a2);
}

在添加a2之前一切正常,ptr指向一些有意义的内存。 但是一旦我添加了a2,ptr仍然指向同一个地方,但带有一些垃圾内存。

这是怎么回事?

1 个答案:

答案 0 :(得分:0)

在向量中添加a2时,向量必须调整大小。这意味着分配新内存并将旧向量复制到这个新(更大)内存中。然后释放旧存储器。你的指针悬挂在这个(旧的)解除分配的内存中。

如果构造带有大小的向量,即std :: vector V(2),则向量获胜; t必须调整大小,指针将始终指向a1的值。