C++ 在2D数组中释放内存
假设我们有:C++ 在2D数组中释放内存,c++,arrays,pointers,dynamic-allocation,C++,Arrays,Pointers,Dynamic Allocation,假设我们有: int** myArray = new int*[100]; for(int i = 0; i < 100; i++){ myArray[i] = new int[3]; } 二, for(int i=0;i
int** myArray = new int*[100];
for(int i = 0; i < 100; i++){
myArray[i] = new int[3];
}
二,
for(int i=0;i<100;i++){
对于(int j=0;j<3;j++){
删除myArray[i][j];
}
}
删除[]myArray;
从直觉上看,我们似乎应该做类似于2的事情。由于我们希望删除分配的所有内存,但我不确定。正确的方法是
for(int i = 0; i < 100; i++)
delete [] myArray[i];
delete [] myArray;
for(int i=0;i<100;i++)
删除[]myArray[i];
删除[]myArray;
您使用了一个循环来创建它,您应该使用一个循环来删除它。顺序与分配顺序相反:
for(int i = 0; i < 100; i++)
delete [] myArray[i]; // delete all "rows" in every "column"
delete [] myArray; // delete all "columns"
for(int i=0;i<100;i++)
删除[]myArray[i];//删除每个“列”中的所有“行”
删除[]myArray;//删除所有“列”
此外:
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)
int***myArray=newint**[100];//(1)
对于(int i=0;i<100;i++)
{
myArray[i]=新int*[3];//(2)
对于(int j=0;j<3;j++)
myArray[i][j]=new int();/(3)
}
对于(int i=0;i<100;i++)
{
对于(int j=0;j<3;j++)
删除myArray[i][j];/(3)
删除[]myArray[i];/(2)
}
删除[]myArray;//(1)
你可以看到它的“反向”性质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)