逐个删除动态数组的元素

Deleting elements of a dynamic array one-by-one

本文关键字:元素 数组 动态 删除      更新时间:2023-10-16

我想通过循环遍历所有元素并对每个元素调用delete来删除动态分配的数组
(我这样做是因为我必须将数组"移动"到另一个位置,也就是说,复制原始数组,然后删除它,但这将花费两倍的时间,而不是同时复制每个元素并单独调用它们上的delete

我有以下代码:

int main()
{
    int *n=new int[2];
    delete n;
    delete (n+1);
}  

但我每次运行这个时都会出现分段错误。。。。

虽然,这很好用-:

int main()
{
    int *n=new int[1];
    delete n;
}    

所以,我的猜测是,delete以某种方式删除了整个数组,而不是单个元素!

有人能解释一下我的猜测是否正确吗?如果是,请提出一个可能的解决方案?

我在Ubuntu 13.04 上使用GCC 4.7.3

不能单独删除元素。使用new []分配时,必须使用delete []解除分配。你在这里做什么:

int *n=new int[1];
delete n;  // ERROR: should be delete []

它不正确。您正在调用未定义的行为。它似乎完全是偶然的,不能依赖

至于解决方法,目前尚不清楚问题出在哪里,但如果你想"移动"数组,你可以将其分配给另一个指针:

int* n=new int[2];
...
int* m = n;
n = nullptr;
....
delete [] m;

删除

int *n=new int[2];

使用

delete [] n;

代码

delete n;

使用new[]进行分配时出错。