【问题标题】:Deallocating memory in a 2D array释放二维数组中的内存
【发布时间】:2016-01-08 07:00:21
【问题描述】:

假设我们有:

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. 的操作,因为我们希望删除分配的所有内存,但我不确定。

【问题讨论】:

标签: c++ arrays pointers dynamic-allocation


【解决方案1】:

你用一个循环来创建它,你应该用一个循环来删除它。顺序颠倒分配顺序:

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

delete [] myArray;                     // delete all "columns"

此外:

  1. 用于删除一维动态分配的数组——用于删除上面的“行”和“列”。

  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)
    

    你可以看到它的“反转”性质。

【讨论】:

    【解决方案2】:

    正确的方法是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2020-01-18
      相关资源
      最近更新 更多