逐个删除动态数组的元素

时间:2013-08-02 11:55:03

标签: c++ pointers memory-management dynamic-arrays

我希望通过遍历所有元素并在每个元素上调用delete来删除动态分配的数组。
(我这样做是因为我必须将一个数组“移动”到另一个位置,即复制原始数组然后将其删除,但这比同时复制每个元素并调用delete需要花费2倍的时间对他们个人而言)

我有以下代码:

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

但每次运行时我都会收到Segmentation错误....

虽然,这很好用 - :

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

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

有人可以解释我的猜测是否正确,如果是,建议可行的解决方法?

我在Ubuntu 13.04上使用GCC 4.7.3

2 个答案:

答案 0 :(得分:7)

您无法单独删除元素。使用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;

答案 1 :(得分:1)

删除

int *n=new int[2];

使用

delete [] n;

代码

delete n;
使用new []进行分配时,

错误。