C++ 删除动态数组时会发生什么情况?

C++ 删除动态数组时会发生什么情况?,c++,arrays,pointers,dynamic,C++,Arrays,Pointers,Dynamic,我制作了一个动态数组(示例): 然后我创建了一个存储指针的向量: vector<int*> pa; pa.push_back(&a[0]); 向量pa; pa.push_back(&a[0]); 在使用“delete[]a;”删除(释放)内存后,我仍然可以访问我推送的元素。(cout您关于如何删除[]的声明works是向后的。它会删除元素,但不会删除指针。在删除指针内容后继续使用指针(正如您所做的)是未定义的行为。这意味着,如果您这样做,任何事情都是允许发生的,因此您不应

我制作了一个动态数组(示例):

然后我创建了一个存储指针的向量:

vector<int*> pa;
pa.push_back(&a[0]);
向量pa;
pa.push_back(&a[0]);

在使用“delete[]a;”删除(释放)内存后,我仍然可以访问我推送的元素。(cout您关于如何删除[]的声明works是向后的。它会删除元素,但不会删除指针。在删除指针内容后继续使用指针(正如您所做的)是未定义的行为。这意味着,如果您这样做,任何事情都是允许发生的,因此您不应该这样做。您现在仍然可以访问元素,这纯粹是运气使然,坏事会发生如果你这样做,将来会发生。

让我们想象一下,我从要删除的向量中删除元素(pa.pop_back();delete[]a).它完全安全吗?这使
pa
完全安全,但你仍然必须知道,如果不重新分配
a
,你就不能再解除对它的引用。不要错过这个关于内存和未定义行为的精彩答案。
vector<int*> pa;
pa.push_back(&a[0]);