假设我们有:
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"
而且:
用于删除一维动态分配的数组 - 用于删除上面的“行”和“列”。
-
仅类似于删除二维指针数组的方式,例如:
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)
你可以看到它的“颠倒”本质。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)