逐个删除动态数组的元素
Deleting elements of a dynamic array one-by-one
我想通过循环遍历所有元素并对每个元素调用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[]进行分配时出错。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀