分配二维数组时的内存管理

Memory management in allocating 2-D array

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

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

这很好用。

我知道动态分配数组的析构函数应该是这样的:

~SquareMatrix()
{
delete [] OneDarray;
}

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

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

delete [] [] matrix;

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

正确的做法是什么?

"What is the correct way of doing it?"

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

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

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

delete [] matrix

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

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

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

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