在C ++中删除

时间:2011-12-06 20:30:58

标签: c++

struct item   
{ 
  unsigned int a, b, c;
};

item* items[10];    
delete items[5];    
items[5] = NULL;

以上代码有效

但以下方法无效

int * arr1[30];

delete (arr1+5);

我是初学者,请告诉我为什么我能够在结构指针的情况下删除但在int的情况下不能删除 指针

3 个答案:

答案 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);