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

时间:2019-01-23 17:00:46

标签: 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;

3 个答案:

答案 0 :(得分:3)

  

交换后删除[]个安全吗?

是的

  

如果它们的长度相同怎么办?

长度无关。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

是的,一旦完成交换,您当然可以删除指针。由于您不再需要指向数组,因此在这种情况下,交换后可以安全删除。

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

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

delete [] a;
delete [] b;

这是正确的方法。干得好