我使用以下代码分配了一个二维数组:
// 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;
但是这不起作用并且给出了编译时错误。
这样做的正确方法是什么?
答案 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;
这会给你一个二维数组,但你不必处理清理。