释放二维数组中的内存

2023-12-12

假设我们有:

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. 用于删除一维动态分配的数组 - 用于删除上面的“行”和“列”。

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

    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)
    

    你可以看到它的“颠倒”本质。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

释放二维数组中的内存 的相关文章

随机推荐