C++ 二维数组/多维数组的动态分配(new)和释放(delete)

1. 一维数组

对于简单的一维数组动态内存分配和释放,如下:int *array1D;//假定数组长度为m//动态分配空间array1D = new int [m];//释放delete [] array1D;

2. 二维数组

二维数组的动态分配和释放//假定数组第一维长度为m, 第二维长度为n//动态分配空间<pre name="code" class="cpp">int **array2D<span style="font-family: Arial, Helvetica, sans-serif;"> = new int *[m];</span>for( int i=0; i<m; i++ ){ array2D[i] = new int [n] ;}//释放for( int i=0; i<m; i++ ){ delete [] arrar2D[i];}delete array2D;//我觉得应该是 delete [] array2D;

P.S. 事实上二维数组空间的释放还可以更简单地用:delete [] array2D;

二维数组的另一种分配和释放形式://假设第一维长为m,第二维长为n//动态分配空间<pre name="code" class="cpp">int** array2D=new int*[m];array2D[0]=new int[m*n];for(int i=1;i<m;++i) array2D[i]=array2D[i-1]+n;//释放delete [] array2D[0];delete [] array2D;

3. 三维数组

三维数组的动态分配和释放int ***array3D;//假定数组第一维为m, 第二维为n,, 第三维为h//动态分配空间array3D = new int **[m];for( int i=0; i<m; i++ ){array3D[i] = new int *[n];for( int j=0; j<n; j++ ){array3D[i][j] = new int [h];}}//释放for( int i=0; i<m; i++ ){for( int j=0; j<n; j++ ){delete array3D[i][j];//觉得应该是 delete [] array3D[i][j];}delete array3D[i];//觉得应该是 delete [] array3D[i];}delete array3D;//觉得应该是 delete [] array3D;

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,next0, 1, 2, 3,4, 5, 6, 7,8, 9, 10, 11,*/#include "stdafx.h"#include <iostream>#include <cstring>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) Errordelete[] 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;}参考:

c++ 二维数组new小结 主要讲各种形式的优缺点

不能接受失败,也意味太想去成功了,从心理学上解释,

C++ 二维数组/多维数组的动态分配(new)和释放(delete)

相关文章:

你感兴趣的文章:

标签云: