c++ - 删除动态数组时会发生什么?

标签 c++ arrays pointers dynamic

<分区>

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

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

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

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

在我用“delete[] a;”删除(释放)内存后,我仍然可以访问我 push_backed 的元素。 (cout << *pa[0]; 输出: 10)

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

最佳答案

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

关于c++ - 删除动态数组时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540277/

相关文章:

c++ - 为什么这个循环变量可以在循环范围外访问?

java - 在自由范围内生成吸血鬼数字

c++ - 如何用用户的输入填充二维数组?

c - 关于函数指针声明

c++ - 如何重定向来自 Stream 的标准输出

c++ - 访问类私有(private)成员的自定义优先级队列比较器

c++ - 无法将 google::sparse_hash_map 的值编译为 unique_ptr

java - 如何以 O(n) 的时间复杂度找到总和为 k 的所有子数组?

c - C双指针(矩阵)的基本问题

C++ 从链表中删除