动态二维数组的分配与释放
两种方法:
1。先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)
相当于递归定义
typedef int array[COL]; //使用typedef定义一个具有COL个元素的数组类型
array *a;//定义二维数组,与一维数组相同
array *a;//定义二维数组,与一维数组相同
a=new array[row]; //为该一维数组(实际上二维)申请空间
该方法定义的动态二维数组的释放只需以下语句即可:
delete[] a;
a=NULL;
2。使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
int **b=new int*[row];//分配一个指针数组,将其首地址保存在b中
for(i=0;i<row;i++) //为指针数组的每个元素分配一个数组
b[i]=new int[col];
该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
for(i=0;i<row;i++)
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
注意不同IDE环境对包含文件,局部变量的不同处理。
代码如下(visual studio 2005版本):










//使用typedef定义一个具有ROW个元素的数组类型
typedef
int
array[COL];

int
main()
{
introw=ROW;//二维数组的行数
intcol=COL;//二维数组的列数
inti,j,n=1;

//
array*a;//定义二维数组,与一维数组相同
a=newarray[row];

//
//赋值
for(i=0;i<row;i++)
for(j=0;j<col;j++)
a[i][j]=n++;

cout<<"solution1:"<<endl;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
//

//释放,或者delete[row]a;或者delete[row]a;或者delete[row]a;
//或者delete[]a;或者delete[]a;或者delete[]a;或者delete[]a;
delete[]a;
a=NULL;
cout<<endl;
//

//
//使用数组指针
//分配一个指针数组,其首地址保存在b中
int**b=newint*[row];

//为指针数组的每个元素分配一个数组
for(i=0;i<row;i++)
b[i]=newint[col];

//
//赋值
for(i=0;i<row;i++)
for(j=0;j<col;j++)
b[i][j]=n++;

cout<<"solution2:"<<endl;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<b[i][j]<<"";
cout<<endl;
}
//

//释放
for(i=0;i<row;i++)
{
delete[col]b[i];
b[i]=NULL;
}
delete[row]b;
b=NULL;
//

getch();
return0;
}







































































代码如下(visual studio 6版本):













































































