在2D数组中释放内存

Deallocating memory in a 2D array

本文关键字:释放 内存 数组 2D      更新时间:2023-10-16

假设:

int** myArray = new int*[100];
for(int i = 0; i < 100; i++){
    myArray[i] = new int[3];
}

释放这个数组的合适方法是什么(下面的方法,如果其中一种方法是正确的)?

1。

delete[] myArray;

2。

for(int i = 0; i < 100; i++){
    for(int j = 0; j < 3; j++){
        delete myArray[i][j];
    }
}
delete[] myArray;

直觉上,我们似乎应该做类似2的事情。因为我们希望我们分配的所有内存都被删除,但我不确定。

您使用一个循环来创建它,您应该使用一个循环来删除它。顺序与分配顺序相反:

for(int i = 0; i < 100; i++)
    delete [] myArray[i];              // delete all "rows" in every "column"
delete [] myArray;                     // delete all "columns"
此外:

  1. 用于删除一维动态分配数组-用于删除上面的"行"answers"列"。

  2. 仅类似于删除2D指针数组的方式,例如:

    int*** myArray = new int**[100];   // (1)
    for(int i = 0; i < 100; i++)
    {
        myArray[i] = new int*[3];      // (2)
        for(int j = 0; j < 3; j++)
            myArray[i][j] = new int(); // (3)
    }
    for(int i = 0; i < 100; i++)
    {
        for(int j = 0; j < 3; j++)
            delete myArray[i][j];      // (3)
        delete [] myArray[i];          // (2)
    }
    delete [] myArray;                 // (1)
    

    你可以看到它的"反向"性质

正确的方法是

for(int i = 0; i < 100; i++)
   delete [] myArray[i];
delete [] myArray;