假设我们有:
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.因为我们想要删除所有分配的内存,但我不确定。
答案 0 :(得分:8)
您使用一个循环来创建它,您应该使用一个循环来删除它。订单与分配顺序相反:
for(int i = 0; i < 100; i++)
delete [] myArray[i]; // delete all "rows" in every "column"
delete [] myArray; // delete all "columns"
此外:
用于删除一维动态分配的数组 - 用于删除&#34;行&#34;和&#34;列&#34;上方。
仅类似于删除指针的二维数组的方式,例如:
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)
你可以看到&#34;逆转&#34;性质。
答案 1 :(得分:2)
正确的方法是
for(int i = 0; i < 100; i++)
delete [] myArray[i];
delete [] myArray;