C++中二维数组的两种动态内存分配方法
来源:互联网 发布:网络电视怎么看爱奇艺 编辑:程序博客网 时间:2024/05/16 13:38
转载自http://blog.csdn.net/lavorange/article/details/42879605
一、二维数据的内存空间动态分配
方法一:
void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i=0;i<xDim;i++) a[i] = new int[yDim]; assert(a!=NULL); } int main() { int **arr = NULL; malloc2D_1(arr); }
首先arr是一个二级指针,为arr分配xDim空间,每一维都是一个指向数组的指针,且每个数组内部的地址空间是连续的,但是数组之间的地址空间没有连续性。
这种分配方法在内存中的布局如下:方法二:
void malloc2D_2(int **&a) { a = (int **)malloc( xDim * sizeof(int *) ); a[0] = (int *)malloc( xDim * yDim * sizeof(int) ); for(int i=1;i<xDim;i++) { a[i] = a[i-1] + yDim; } assert(a!=NULL); } int main() { int **arr = NULL; malloc2D_2(arr); }
这种方法相当于动态分配了一个一维的连续的空间,然后让相应的数组指针指向某些固定的位置达到调用的目的。这种分配方法在内存中的布局如下:
二、二维数据的内存空间释放
对于第一种分配方式需要一个一个释放,对第二种方式只要分配两个指针即可。
void free2D_1(int **a) { for(int i=0;i<xDim;i++) free(a[i]); } void free2D_2(int **a) { free(a[0]); free(a); }
三、完整代码#include<iostream> using namespace std; const int xDim = 10; const int yDim = 8; //分配空间方式一 void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i=0;i<xDim;i++) a[i] = new int[yDim]; assert(a!=NULL); } //分配空间方式二 void malloc2D_2(int **&a) { a = (int **)malloc( xDim * sizeof(int *) ); a[0] = (int *)malloc( xDim * yDim * sizeof(int) ); for(int i=1;i<xDim;i++) { a[i] = a[i-1] + yDim; } assert(a!=NULL); } void assign_value(int **a,int val) { for(int i=0;i<xDim;i++) { for(int j=0;j<yDim;j++) { a[i][j] = val; cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; } //释放空间方式一 void free2D_1(int **a) { for(int i=0;i<xDim;i++) free(a[i]); } //释放空间方式二 void free2D_2(int **a) { free(a[0]); free(a); } int main() { int **arr1 = NULL; int **arr2 = NULL; malloc2D_1(arr1); malloc2D_2(arr2); assign_value(arr1,1); assign_value(arr2,2); free2D_1(arr1); free2D_2(arr2); system("pause"); return 0; }
阅读全文
0 0
- C++中二维数组的两种动态内存分配方法
- C语言动态申请二维数组的两种方法
- C语言二维数组动态内存分配
- C/C++动态二维数组的内存分配和释放 .
- C/C++动态二维数组的内存分配和释放
- 二维数组的动态内存分配
- 二维数组的动态内存分配
- C++/C动态二维数组内存分配举例
- 指针数组,数组指针,二维数组的动态内存分配
- C语言二维数组矩阵动态内存分配
- C语言二维数组矩阵动态内存分配
- C/C++中的二维数组动态内存分配与释放
- C/C++上二维数组的两种动态分配内存方法
- C/C++上二维数组的两种动态分配内存方法
- C++ 中如为二维数组分配动态内存
- 关于二维数组的动态内存分配的一个比较好的方法
- 动态申请二维数组两种方法
- 二维数组、三维数组动态内存分配
- bootstrap辅助类和响应式工具
- 排列问题
- 1期_原理图部分
- jeecg 事务不回滚
- 接口
- C++中二维数组的两种动态内存分配方法
- 【0001】win10安装教程
- Java注解合并,注解继承
- js转换Date日期格式
- 转义符号'\'
- java.lang.IllegalArgumentException: node to traverse cannot be null!
- 中兴蓝剑计划机试题(FIFO缓存)
- 编写bat脚本
- 12、数值的整数次方