Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二维阵列分配中的内存管理_C++_Memory Management - Fatal编程技术网

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[]
按与分配完全相反的顺序删除<代码>删除[]不是有效的语法

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

delete [] matrix
正确的做法是什么?

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

如果您确定存在这种情况,则可以使用
new[]
按与分配完全相反的顺序删除<代码>删除[]不是有效的语法

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;