c++ - 重新分配后删除 C++ 中的数组指针是否安全?

标签 c++ pointers new-operator delete-operator

假设我想在 C++ 中交换两个数组指针,我用 new [] 分配了不同的长度。交换后 delete [] 它们安全吗?如果它们的长度相同怎么办?

int *a;
int *b;
int *tmp;

a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;

delete [] a;
delete [] b;

最佳答案

是的,你可以。原因是准确释放内存所需的信息由空闲存储(大多数情况下为堆)管理。所以它知道如何根据地址而不是变量进行删除。通常此信息保存在 *(ptr - x) 中,其中 x 是跟踪数据的大小。

关于c++ - 重新分配后删除 C++ 中的数组指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332210/

相关文章:

php - 那么当我们在 PHP 中使用 'new' 时到底发生了什么

c++ - Eigen Vector*Scalar + Vector*Scalar 的未定义行为 --> libigl/external/eigen 和其他特征冲突

c++ - 如何强制编译器使用聚合初始化而不是构造函数

c++ - 理解为什么它不能使用 memcpy 正确复制

c++ - 将空数组传递给函数,填充数组并获取值

C++ 何时以及如何使用 std::iterator value_type、引用、指针?

Javascript - 具有多个偏移量比较的相同日期

c++ - 使用指针而不是引用时出现段错误访问指向结构的指针数组

c - 减法指针不指向同一数组的不同元素在 C 中有效吗?

C# 现有对象上的 'new' 关键字