zz:http://blog.csdn.net/livelylittlefish/archive/2008/03/15/2186175.aspx
動態二維數組的分配與釋放
array *a; //定義二維數組,與一維數組相同
2。 使用數組指針,分配一個指針數組,將其首地址保存在b中,然後再爲指針數組的每個元素分配一個數組
int **b=new int*[row]; //分配一個指針數組,將其首地址保存在b中
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
代碼如下(visual studio 2005版本):
* 動態二維數組(visual studio 2005版本)
*********************************************************************** */
#include < iostream >
#include < conio.h >
using namespace std;
#define ROW 4 // 行數
#define COL 6 // 列數
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 ;
}
運行結果如下: