C++ 二维阵列分配中的内存管理
我使用以下代码分配了一个二维数组:C++ 二维阵列分配中的内存管理,c++,memory-management,C++,Memory Management,我使用以下代码分配了一个二维数组: // Dynamic allocation int **matrix=new int*[n]; for(int i=0;i<n;i++) { matrix[i]=new int[n]; } 重点放在[]上,因为如果不写入,则只会删除数组的第一个元素 基于类似的理由,我想我需要放置两次[],以便删除整个二维数组,比如 删除[][]矩阵 但这不起作用,并且会产生编译时错
// Dynamic allocation
int **matrix=new int*[n];
for(int i=0;i<n;i++)
{
matrix[i]=new int[n];
}
重点放在[]
上,因为如果不写入,则只会删除数组的第一个元素
基于类似的理由,我想我需要放置两次[]
,以便删除整个二维数组,比如
删除[][]矩阵代码>
但这不起作用,并且会产生编译时错误
正确的做法是什么?
“正确的做法是什么?”
使用标准容器,例如std::vector
或std::array
(假定编译时已经知道N
)是正确的方法。
您没有在第一位使用new()
/new[]
和delete
/delete[]
(除了罕见的有效用例)
如果您确定存在这种情况,则可以使用new[]
按与分配完全相反的顺序删除<代码>删除[]正如编译器已经告诉您的,code>不是有效的语法
for(int i=0;i<n;i++)
{
delete [] matrix[i];
}
delete [] matrix
“正确的做法是什么?”
使用标准容器,例如std::vector
或std::array
(假定编译时已经知道N
)是正确的方法。
您没有在第一位使用new()
/new[]
和delete
/delete[]
(除了罕见的有效用例)
如果您确定存在这种情况,则可以使用new[]
按与分配完全相反的顺序删除<代码>删除[]正如编译器已经告诉您的,code>不是有效的语法
for(int i=0;i<n;i++)
{
delete [] matrix[i];
}
delete [] matrix
这将为您提供一个二维数组,但您不必处理清理
这将为您提供一个二维数组,但您不必处理清理。以与分配方式完全相反的方式销毁内容。仅仅调用delete[]matrix
并不能做到这一点。你用了一个循环来建造,你也需要一个循环来毁灭。(理想情况下,首先不要做任何这些:使用<代码> STD::矢量< /代码>,让标准LIB为您工作。停止在C++沙箱中用C桶和铲子玩)。WhozCraig的副本可能会重复,谢谢。这是我永远不会忘记的一点。做与我在分配中所做完全相反的事情。是的,学校作业要求它严格地是一个数组,而不是一个向量。:)@AkshayArora太糟糕了;祝你好运。(并准备好实现该对象类;您将需要它)。不用担心。破坏东西的方式与你分配它们的方式完全相反。仅仅调用delete[]matrix
并不能做到这一点。你用了一个循环来建造,你也需要一个循环来毁灭。(理想情况下,首先不要做任何这些:使用<代码> STD::矢量< /代码>,让标准LIB为您工作。停止在C++沙箱中用C桶和铲子玩)。WhozCraig的副本可能会重复,谢谢。这是我永远不会忘记的一点。做与我在分配中所做完全相反的事情。是的,学校作业要求它严格地是一个数组,而不是一个向量。:)@AkshayArora太糟糕了;祝你好运。(并准备好实现该对象类;您将需要它)。别担心。
std::vector<std::vector<int>> matrix;