c++ - 在 C++ 中,调用 delete 运算符时会发生什么?

标签 c++ arrays memory delete-operator

在 C++ 中,我理解 delete 运算符在与数组一起使用时会“破坏”它,释放它使用的内存。但完成后会发生什么?

我想我的程序只会标记出堆中被释放以供重新使用的相关部分,然后继续。

但我也注意到,数组的第一个元素设置为 null,而其他元素保持不变。这有什么用?

int * nums = new int[3];
nums[0] = 1;
nums[1] = 2;

cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;

delete [] nums;

cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;

最佳答案

调用 delete[] 时会发生两件事:

  1. 如果数组的类型具有非平凡的析构函数,则以相反的顺序为数组中的每个元素调用析构函数
  2. 释放数组占用的内存

在调用 delete 后访问数组占用的内存会导致未定义的行为(也就是说,任何事情都可能发生——数据可能仍然存在,或者当您尝试读取时您的程序可能崩溃它,否则可能会发生更糟糕的事情)。

关于c++ - 在 C++ 中,调用 delete 运算符时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454598/

相关文章:

c - 我的 C 语法的左递归错误

java - 如何使用 map 节省空间

haskell - 图形简化/棘手的空间泄漏示例

c++ - COM 中的 C++ 函数指针有问题

C++ 迭代对象 vector 并将 STL 算法应用于成员变量

php - 将数组转换为字符串,然后返回 PHP

c - 使用指针打印二维数组时出错

c++ - Qt5 QProcess 处理带有 "special"字符的参数

c++ - 从 C++ 程序读取和设置组策略设置

java - 获取操作系统级别的系统信息