C语言为二维数组动态分配内存的问题

发布时间:2014-10-22 13:23:32编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C语言为二维数组动态分配内存的问题",主要涉及到C语言为二维数组动态分配内存的问题方面的内容,对于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语言中 sscanf 的用法
下一篇:Hibernate学习:手动搭建Hibernate框架

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款