我希望通过遍历所有元素并在每个元素上调用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
答案 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 []进行分配时,错误。