struct item
{
unsigned int a, b, c;
};
item* items[10];
delete items[5];
items[5] = NULL;
Run Code Online (Sandbox Code Playgroud)
上面的代码有效
但是下面的方法不起作用
int * arr1[30];
delete (arr1+5);
Run Code Online (Sandbox Code Playgroud)
我是初学者,请告诉我为什么我能够在结构指针的情况下删除但不能在int指针的情况下删除
Stu*_*etz 13
你似乎误解了delete它是什么:它纯粹而且简单地释放分配的内存new,而不是'删除'数组的元素.
所以你可以像这样使用它:
int *p = new int;
//...
delete p;
Run Code Online (Sandbox Code Playgroud)
分配数组时,必须改为使用delete[],如下所示:
int *q = new int[23];
//...
delete [] q;
Run Code Online (Sandbox Code Playgroud)
但是在任何时候你都不应该尝试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;
}
Run Code Online (Sandbox Code Playgroud)