gpt4 book ai didi

c++ - 释放二维数组中的内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:50 26 4
gpt4 key购买 nike

假设我们有:

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)

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

关于c++ - 释放二维数组中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com