分配二维数组的内存管理

时间:2015-02-21 18:56:08

标签: c++ memory-management

我使用以下代码分配了一个二维数组:

// Dynamic allocation
        int **matrix=new int*[n];
        for(int i=0;i<n;i++)
        {
            matrix[i]=new int[n];
        }

这很好用。

  • 首先,我们分配一个整数指针数组。
  • 然后我们进一步分配每个早期指针指向n整数的内存位置。这会创建我们的二维数组。

我知道动态分配数组的析构函数应该如下所示:

~SquareMatrix()
{
delete [] OneDarray;
}

重点放在[]上,因为如果没有写入,只会删除数组的第一个元素。

基于类似的理由,我想我需要将[]放置两次,以便删除整个二维数组,例如,

delete [] [] matrix;

但是这不起作用并且给出了编译时错误。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

  

&#34; 这样做的正确方法是什么?&#34;

使用标准容器,例如std::vector<std::vector<int>>std::array<std::array<int,N>,N>(假设N在编译时已知)是正确的方式。
您不能在第一名使用new() / new[]delete / delete[](除了罕见的有效用例)。

如果您确定自己有这种情况,则会按照与使用new[]分配完全相反的顺序删除。正如编译器已经告诉你的那样,delete [][];不是有效的语法。

答案 1 :(得分:3)

for(int i=0;i<n;i++)
{
    delete [] matrix[i];
}

delete [] matrix

您需要删除每个内部数组,然后删除该数组。

正如评论中所建议的那样。更安全的方法是使用标准容器,例如std::vector。你可以这样做:

std::vector<std::vector<int>> matrix;

这会给你一个二维数组,但你不必处理清理。