【问题标题】:What happens when I delete dynamic array? [duplicate]当我删除动态数组时会发生什么? [复制]
【发布时间】:2017-07-21 06:50:21
【问题描述】:

我做了一个动态数组(例子):

int *a;
a = new int[3];
a[0] = 10; a[1] = 20; a[2] = 30;

比我创建一个存储指针的向量:

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

使用“delete[] a;”删除(释放)内存后,我仍然可以访问我 push_backed 的元素。 (cout

为什么会这样?当我“delete[] a”时,它只删除了指向元素的指针,但元素仍然可以访问?

【问题讨论】:

标签: c++ arrays pointers dynamic


【解决方案1】:

您关于 delete[] 如何工作的陈述是倒退的。它删除元素但不删除指针。正如您所做的那样,在其内容被删除后继续使用指针是未定义的行为。这意味着如果您这样做,实际上任何事情都可以发生,因此您不应该这样做。您现在仍然可以访问这些元素纯属幸运,如果您这样做,将来会发生坏事。

【讨论】:

  • 假设我从要删除的向量中删除了元素 (pa.pop_back(); delete[] a)。它完全安全吗?
  • 这使得pa 完全安全,但您仍然必须知道,如果不重新分配a,您将无法再取消引用它。
猜你喜欢
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多