如何在c ++中删除此2D数组

时间:2013-02-23 06:21:13

标签: c++ pointers memory-management

在简单的一维数组中:

node *nodes =  new node[MAX_NODES];

删除:

delete [] nodes;

删除数组中分配的所有节点。

但在这种情况下:

float (*buildingArray)[3] = new float[10][3];

这句话是否使buildingArray为3个浮点指针的单维数组?这是解除分配线:

delete[] buildingArray;

上面是否重新分配delete数组,但是我怀疑它是否会删除它的引用?

3 个答案:

答案 0 :(得分:16)

  

上述取消分配会删除数组吗?

是的。

只需遵循以下规则:

您需要分别致电deletedelete []new


如果你有一个指针数组,每个索引都分配了动态内存,你需要显式循环它并显式释放每个数组元素。


另外,您最好使用new []std::vector而不是动态分配的数组。

答案 1 :(得分:3)

是的。解释是因为内存中没有关于数组维数的信息。

如果您有一个3 * 4项数组,它与12项数组完全相同。这就是你解决变化的特定元素(以行后方式存储)的方式。

所以delete[]会完美运作。

但是使用newdelete运算符的日期并不常见smart pointers,除非你真的有充分的理由自己控制分配。

答案 2 :(得分:2)

new float[10][3]分配一个包含10个3 floats数组的数组,并返回指向第一个元素的指针(这是一个包含3个浮点数的数组)。

在此指针上调用delete[]会导致整个数组被删除。

两种情况的唯一区别在于,在第一种情况下,存储在动态分配的数组中的值的类型是float,在第二种情况下,类型是float[3]