struct item
{
unsigned int a, b, c;
};
item* items[10];
delete items[5];
items[5] = NULL;
以上代码有效
但以下方法无效
int * arr1[30];
delete (arr1+5);
我是初学者,请告诉我为什么我能够在结构指针的情况下删除但在int的情况下不能删除 指针
答案 0 :(得分:13)
你似乎误解了delete
的用途:纯粹而简单地释放由new
分配的内存,而不是'删除'数组的元素。
所以你可以像这样使用它:
int *p = new int;
//...
delete p;
分配数组时,必须使用delete[]
,如下所示:
int *q = new int[23];
//...
delete [] q;
但是,您在任何时候都不应该尝试delete
未被new
编辑的内容,或使用不匹配的delete
版本,例如delete [] p;
或delete q;
以上。
如果你真正想要的是某种'数组',你可以从中删除元素,试试这个:
#include <vector>
struct item
{
unsigned int a, b, c;
};
int main()
{
std::vector<item> items(10);
items[5].a = 23;
items.erase(items.begin() + 5);
return 0;
}
答案 1 :(得分:3)
您是否在任何地方分配堆内存?你没有在上面的代码中这样做。你很幸运,第一次删除不会崩溃。
答案 2 :(得分:0)
使用(arr1+5)
方法时,您将在索引5处传递数组插槽本身的内存地址,而不是插槽所包含的int*
。要在索引5处的插槽中包含的delete
int*
,您必须取消引用指针值,例如:
delete *(arr1+5);