C语言为二维数组动态分配内存的问题
来源:互联网 发布:蜀国只有一个州 知乎 编辑:程序博客网 时间:2024/05/17 01:33
转载请注明出处:http://blog.csdn.net/ns_code/article/details/11357667
C语言中动态分配一位数组是很简单的,但是没有可以直接对二维数组进行动态分配的函数,因此,要相对二维数组动态分配内存,便要借助于一位数组来实现,具体如下:
假设要为一个n*m的二维数组分配动态内存
首先需要注意的是,不要这样一次性分配为数组内存空间:
int **arr = (int**)malloc(n * m * sizeof(int));
正确的做法是先分配行,再分配列。
释放内存的时候,要先释放列,再释放行。
注意,顺序反了的话,会把列的地址擦除,导致释放列时内存时找不到地址,程序崩溃。
正确的分配空间代码如下:
int **arr = (int **)malloc(n*sizeof(int *));
for(i=0;i<n;i++)
arr[i] = (int *)malloc(m*sizeof(int));
正确的释放空间代码如下:
for (i = 0; i < n; i++)
free(arr[i]);/*释放列*/
free(arr);/*释放行*/
注:这种分配方式得到的其实并不是真正意义上的二维数组,因为其行与行之间的内存并不连续,虽然可以用下标arr[i][j]的方式访问,但当用指向该二维数组的指针来访问时候,不能通过指针值的增加来跨行获取元素,不过这种情况一般用的也不多,因此上述分配方式在大多数情况下的操作都能得到正确的结果。
一篇文章分析的不错,源地址:http://tsindahui.blog.sohu.com/84512010.html
- C语言为二维数组动态分配内存的问题
- C语言中二维数组动态分配内存
- C语言动态分配二维数组
- C语言动态分配二维数组
- C语言二维数组动态分配
- C语言动态分配二维数组
- C语言动态分配二维数组
- 为一个二维数组动态分配&释放内存
- C语言两种动态分配二维数组方式的讨论
- C、C++二维数组动态分配内存
- C语言 二维数组动态分配和释放
- C语言中动态分配二维数组
- C语言如何动态分配二维数组??
- c语言二维数组定义域动态分配空间
- C语言 二维数组动态分配和释放
- c语言malloc()动态分配二维数组
- 二维数组动态分配内存
- 二维数组动态分配内存
- 同步和异步的区别
- Android的logcat命令详解
- win7 64位系统搭建android开发环境
- dede分页标签惹的祸:pagebreak中的的方法
- C语言中 sscanf 的用法
- C语言为二维数组动态分配内存的问题
- 编程比较两棵二叉树是否相等
- 旧诗4
- Android中创建自己的Launcher
- 射频设计经典参考书
- Android APK反编译得到Java源代码和资源文件
- cf 342B - Xenia and Spies(贪心)
- struts1 入门小例子
- 关于数据库的部分知识点