【发布时间】:2013-08-02 11:55:03
【问题描述】:
我想通过循环遍历所有元素并在每个元素上调用 delete 来删除动态分配的数组。
(我这样做是因为我必须将一个数组“移动”到另一个位置,即复制原始数组然后删除它,但这将花费 2 倍于同时复制每个元素并在它们上调用 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
【问题讨论】:
-
最简单的方法是使用 C++ 标准容器(在这种情况下为
std::vector)而不是动态数组,并且只需使用容器的擦除方法。但是,另一方面,你想做什么?为什么要一个一个地删除元素? -
实际上,我正在尝试自己制作另一个类似矢量的容器。 [只是为了更好地了解
std::vectors的工作原理] -
@Ammol 学习 C++?好的。所以你的问题是关于向量的析构函数?这就是你试图一个一个地删除一个元素的原因?
-
嗯..有点! ..正如问题中提到的,我试图将数组复制到另一个位置并释放原始数组... [我试图模仿
std::vector::resize()操作] -
是的,我之前也做过同样的事情。无论如何感谢您的帮助。 :)
标签: c++ pointers memory-management dynamic-arrays