我是靠谱客的博主 顺利微笑,最近开发中收集的这篇文章主要介绍C语言为二维数组动态分配内存的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载请注明出处: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语言为二维数组动态分配内存的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部