重新分配后删除 C++ 中的数组指针是否安全?
Is it safe to delete an array pointer in C++ after reassignment?
假设我想在 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;
Is it safe to delete [] them after swapping?
是的。
What if they have the same length?
长度无关。
是的,一旦交换完成,您当然可以删除指针。由于您不再需要指向数组,因此在这种情况下,交换后删除是安全的。
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++ 中交换两个数组指针,我用 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;
Is it safe to delete [] them after swapping?
是的。
What if they have the same length?
长度无关。
是的,一旦交换完成,您当然可以删除指针。由于您不再需要指向数组,因此在这种情况下,交换后删除是安全的。
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 是跟踪数据的大小。