【问题标题】: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"
此外:
用于删除一维动态分配的数组——用于删除上面的“行”和“列”。
-
仅类似于删除 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;