對於簡單的一維數組動態內存分配和釋放,如下:
int *array1D;//假定數組長度為m //動態分配空間 array1D = new int [m]; //釋放 delete [] array1D;
二維數組的動態分配和釋放
//假定數組第一維長度為m, 第二維長度為n //動態分配空間
int **array2D = new int *[m];for( int i=0; i
P.S. 事實上二維數組空間的釋放還可以更簡單地用:delete [] array2D;
二維數組的另一種分配和釋放形式:
//假設第一維長為m,第二維長為n //動態分配空間
int** array2D=new int*[m]; array2D[0]=new int[m*n]; for(int i=1;i//釋放delete [] array2D[0];delete [] array2D;
3. 三維數組
三維數組的動態分配和釋放
int ***array3D;//假定數組第一維為m, 第二維為n, 第三維為h //動態分配空間 array3D = new int **[m]; for( int i=0; i
4. 二維數組的一個例子
其中的析構函數用到了delete,構造函數用到了new進行分配。// W4-課程作業-填空題1-3.cpp : Defines the entry point for the console application. /* 寫一個二維數組類 Array2,使得下面程序的輸出結果是: 輸入 無 輸出 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, next 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, */ #include stdafx.h #include#include using namespace std; // 在此處補充你的代碼 class Array2 { private: int hang, lie; int **iar; public: Array2() :hang(0), lie(0), iar(NULL) {} Array2(int h, int l) :hang(h), lie(l) { iar = new int*[h]; iar[0] = new int[h*l]; for (int i = 1; i < h; ++i) iar[i] = iar[i - 1] + l; } ~Array2() { //cout << ; if (iar != NULL) { delete[] iar[0]; //delete的方式要對,不然就會出現_Block_Type_Is_Valid (pHead->nBlockUse) Error delete[] iar; } } int*& operator[](int m) { return iar[m]; } const int operator() (int m, int n) { return iar[m][n]; } Array2& operator=(const Array2& ar) { if (ar.iar == iar) return *this; if (iar != NULL) { for (int i = 0; i < hang; ++i) delete[] iar[i]; delete[] iar; } if (ar.iar != NULL) { hang = ar.hang; lie = ar.lie; iar = new int*[hang]; iar[0] = new int[hang*lie]; for (int i = 1; i < hang; ++i) iar[i] = iar[i - 1] + lie; for (int i = 0; i < hang; ++i) for (int j = 0; j < lie; ++j) iar[i][j] = ar.iar[i][j]; } else { hang = 0; lie = 0; iar = NULL; } return *this; } }; int _tmain(int argc, _TCHAR* argv[]) { Array2 a(3, 4); int i, j; for (i = 0; i < 3; ++i) for (j = 0; j < 4; j++) a[i][j] = i * 4 + j; for (i = 0; i < 3; ++i) { for (j = 0; j < 4; j++) { cout << a(i, j) << ,; } cout << endl; } cout << next << endl; Array2 b; b = a; for (i = 0; i < 3; ++i) { for (j = 0; j < 4; j++) { cout << b[i][j] << ,; } cout << endl; } return 0; }