当前位置:  开发笔记 > 编程语言 > 正文

动态分配C中的数组数组

如何解决《动态分配C中的数组数组》经验,为你挑选了2个好方法。

我并不真正理解C中的一些基本内容,比如动态分配数组数组.我知道你可以这样做:

int **m;

为了声明一个二维数组(随后将使用一些*alloc函数分配).也可以通过这样做"轻松"访问它*(*(m + line) + column).但是我应该如何为该数组中的元素赋值?使用gcc时,以下语句m[line][column] = 12;因分段错误而失败.

任何文章/文档将不胜感激.:-)



1> jpalecek..:

m[line][column] = 12语法是确定(提供linecolumn在范围内).

但是,您没有编写用于分配它的代码,因此很难确定它是错还是正确.它应该是符合的

m = (int**)malloc(nlines * sizeof(int*));

for(i = 0; i < nlines; i++)
  m[i] = (int*)malloc(ncolumns * sizeof(int));

一些旁注:

这样,您可以为每条线分配不同的长度(例如,三角形阵列)

稍后您可以在使用数组时realloc()或free()单个行

当你释放()整个数组时,你必须释放()每一行



2> JaredPar..:

您的语法m [line] [colummn]是正确的.但是为了在C中使用2D数组,必须为它分配内存.例如,此代码将为给定行和列的表分配内存.

int** AllocateArray(int line, int column) {
  int** pArray = (int**)malloc(line*sizeof(int*));
  for ( int i = 0; i < line; i++ ) {
    pArray[i] = (int*)malloc(column*sizeof(int));
  }
  return pArray;
}

注意,为了简洁起见,我省略了malloc的错误检查.真正的解决方案应该包括它们.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有