C/C++上二维数组的两种动态分配内存方法
来源:互联网 发布:java发送get post请求 编辑:程序博客网 时间:2024/06/05 07:08
最近在看一个程序的源代码的时候了解到了二维数组的动态分配空间以及释放的方法,在此记录。
这种方法相当于动态分配了一个一维的连续的空间,然后让相应的数组指针指向某些固定的位置达到调用的目的。
三、完整代码
一、二维数据的内存空间动态分配
方法一:
- 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++)
- Gradle探索(1)-简介
- java.lang.IllegalStateException
- 【Flume】Rpc sink XX closing Rpc client:NettyAvroRpcClient {xx} …… Failed to send events 问题解决
- Spring-----15、资源访问
- Servlet自学第5讲:Tomcat目录结构
- C/C++上二维数组的两种动态分配内存方法
- android跨进程事件注入(程序模拟用户输入)
- 欢迎使用CSDN-markdown编辑器
- 流行的jquery 提示插件 tip
- Android中StatFs获取系统/sdcard存储(剩余空间)大小
- 项目管理心得:一个项目经理的个人体会、经验总结
- 阿里巴巴 2015 实习笔试题 分布式系统中的RPC请求经常出现乱序的情况
- 互联网行业薪水
- android layout 相关