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

对于简单的一维数组动态内存分配和释放,相信大家都是知道的,不过还是举个例子吧:

#include

using namespace std;

int main()

{

int n;

cin>>n;

//分配动态一维数组

int *arr=new int[n];

for(int i=0;i

cin>>arr[i];

for(int i=0;i

cout<

//释放arr数组

delete[] arr;

return 0;

}

但是,对于多维数组动态分配,大家可能不太熟悉。下面以常见的二维和三维数组为例来说明:

1. 二维数组的动态分配和释放

int **array2D;

//假定数组第一维长度为m, 第二维长度为n

//动态分配空间

array2D = new int *[m];

for( int i=0; i

{

array2D[i] = new int [n] ;

}

//释放

for( int i=0; i

{

delete [] arrar2D[i];

}

delete array2D;

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

2. 三维数组的动态分配和释放

int ***array3D;

//假定数组第一维为m, 第二维为n, 第三维为h

//动态分配空间

array3D = new int **[m];

for( int i=0; i

{

array3D[i] = new int *[n];

for( int j=0; j

{

array3D[i][j] = new int [h];

}

}

//释放

for( int i=0; i

{

for( int j=0; j

{

delete array3D[i][j];

}

delete array3D[i];

}

delete array3D;

https://www.cnblogs.com/Sylla-Zhang/archive/2012/10/08/2715300.html

delete和delete[]的差别是什么?

delete 释放new分配的单个对象指针指向的内存

delete[] 释放new分配的对象数组指针指向的内存

如果对象是POD简单结构,效果一样 如果对象有动态分配内存delete会内存泄露。

让述一下内存释放的过程不同。

(1). 针对简单类型 使用new分配后的不管是数组还是非数组形式内存空间用两种方式均可 如:

int *a = new int[10];

delete a;

delete [] a;

此种情况中的释放效果相同,原因在于:分配简单类型内存时,内存大小已经确定,系统可以记忆并且进行管理,在析构时,系统并不会调用析构函数,

A *a = new A[10];

delete a; //仅释放了a指针指向的全部内存空间 但是只调用了a[0]对象的析构函数 剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏

delete [] a; //调用使用类对象的析构函数释放用户自己分配内存空间并且 释放了a指针指向的全部内存空间

[an error occurred while processing the directive]
Copyright © 2088 世界杯决赛结果_世界杯队伍 - yzxygq.com All Rights Reserved.
友情链接