释放二维数组中的内存
Deallocating memory in a 2D array
假设我们有:
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 [] myArray;
您使用了一个循环来创建它,您应该使用一个循环来删除它。顺序与分配顺序相反:
for(int i = 0; i < 100; i++)
delete [] myArray[i]; // delete all "rows" in every "column"
delete [] myArray; // delete all "columns"
此外:
用于删除一维动态分配数组-用于删除上面的"rows"和"columns"。
仅类似于删除二维指针数组的方式,例如:
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)
你可以看到它的"reversed"本质。
假设我们有:
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 [] myArray;
您使用了一个循环来创建它,您应该使用一个循环来删除它。顺序与分配顺序相反:
for(int i = 0; i < 100; i++)
delete [] myArray[i]; // delete all "rows" in every "column"
delete [] myArray; // delete all "columns"
此外:
用于删除一维动态分配数组-用于删除上面的"rows"和"columns"。
仅类似于删除二维指针数组的方式,例如:
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)
你可以看到它的"reversed"本质。