首页 > 解决方案 > 重新分配后在 C++ 中删除数组指针是否安全?

问题描述

假设我想在 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;

标签: c++pointersnew-operatordelete-operator

解决方案


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


推荐阅读