您的位置:首页 > 其它

动态二维数组的分配与释放

2012-03-22 21:45 169 查看


动态二维数组的分配与释放

两种方法:

1。先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)

相当于递归定义



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

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;





注意不同IDE环境对包含文件,局部变量的不同处理。





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


/************************************************************************


* 动态二维数组(visual studio 2005版本)


************************************************************************/


#include <iostream>


#include <conio.h>




using namespace std;




#define ROW 4 //行数


#define COL 6 //列数

//使用typedef定义一个具有ROW个元素的数组类型


typedef int array[COL];




int main()


{


int row=ROW; //二维数组的行数


int col=COL; //二维数组的列数


int i,j,n=1;




//////////////////////////////////////////////////////////////////////////


array *a; //定义二维数组,与一维数组相同


a=new array[row];




//////////////////////////////////////////////////////////////////////////


//赋值


for(i=0;i<row;i++)


for(j=0;j<col;j++)


a[i][j]=n++;




cout <<"solution 1:"<<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=new int*[row];




//为指针数组的每个元素分配一个数组


for(i=0;i<row;i++)


b[i]=new int[col];




//////////////////////////////////////////////////////////////////////////


//赋值


for(i=0;i<row;i++)


for(j=0;j<col;j++)


b[i][j]=n++;




cout <<"solution 2:"<<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();


return 0;


}





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


/************************************************************************


* 动态二维数组(visual studio 6版本)


************************************************************************/


#include <iostream.h>




#define ROW 4 //行数


#define COL 6 //列数




//使用typedef定义一个具有COL个元素的数组类型


typedef int array[COL];




int main()


{


int row=ROW; //二维数组的行数


int col=COL; //二维数组的列数


int i,j,n=1;




//////////////////////////////////////////////////////////////////////////


array *a; //定义二维数组,与一维数组定义相同


a=new array[row];




//////////////////////////////////////////////////////////////////////////


//赋值


for(i=0;i<row;i++)


for(j=0;j<col;j++)


a[i][j]=n++;




cout <<"solution 1:"<<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=new int*[row];




//为指针数组的每个元素分配一个数组


for(i=0;i<row;i++)


b[i]=new int[col];




//////////////////////////////////////////////////////////////////////////


//赋值


for(i=0;i<row;i++)


for(j=0;j<col;j++)


b[i][j]=n++;




cout <<"solution 2:"<<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;


//////////////////////////////////////////////////////////////////////////




return 0;


}





运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: