C/C++上二维数组的两种动态分配内存方法
来源:互联网 发布:假面骑士ooo网络特别版 编辑:程序博客网 时间:2024/05/17 08:30
最近在看一个程序的源代码的时候了解到了二维数组的动态分配空间以及释放的方法,在此记录。
一、二维数据的内存空间动态分配
方法一:
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;}
Author:忆之独秀
Email:leaguenew@qq.com
注明出处:http://blog.csdn.net/lavorange/article/details/42879605
0 0
- C/C++上二维数组的两种动态分配内存方法
- C/C++上二维数组的两种动态分配内存方法
- C语言两种动态分配二维数组方式的讨论
- 动态分配二维数组的两种方法
- C语言中二维数组动态分配内存
- C、C++二维数组动态分配内存
- C语言为二维数组动态分配内存的问题
- C/C++动态分配二维数组(在堆上分配二维数组内存)
- C语言动态申请二维数组的两种方法
- C语言动态分配二维数组
- C语言动态分配二维数组
- C/C++动态分配二维数组
- C语言二维数组动态分配
- C语言动态分配二维数组
- C/C++动态分配二维数组
- C语言动态分配二维数组
- c和c++中的一维数组和二维数组的动态分配内存,以及参数传递
- 二维数组动态分配和释放(c/c++)
- lua基础
- 2.简单工厂模式
- 打包H264码流到FLV文件
- guava有感
- 最少拦截系统 贪心
- C/C++上二维数组的两种动态分配内存方法
- Doing Homework again 贪心
- 第十八周项目1-3:删除首结点
- Lua源代码阅读(二)string的实现
- 使用真机调试时的问题。
- 解析oracle的rownum
- Linux内核学习(一)8086编程模型
- 集训小记 8
- Hadoop2.5.1在Ubuntu14中的伪分布配置+wordcount测试+eclipse环境配置