在Heap中用C(不是指针数组)分配2D数组

Zel*_*ahl 3 c arrays pointers memory-management allocation

我有一个简单的问题,但答案似乎很难找到:

如何在C(不是C++)中创建一个真正的2D数组,动态调整大小(编译时未知的大小),而不是堆上的指针数组,以便我可以将该分配放入单独的函数中并返回分配数组,没有收到任何警告gcc -Wall

我在SO和其他论坛上发现了很多其他问题,但答案都有一些缺陷:

  • 我看到了许多答案,它们展示了如何初始化一个指针数组,根据一些注释可能导致内存碎片,并且需要在不再使用时释放循环.
  • 我不希望只有一个预定义的数组大小,但想在一些循环中使用它,创建多个大小的数组.
  • 我不希望预定义数组中的值,它们是在程序运行时计算的.
  • 我读到了内存中的布局,当使用一些创建数组的方法时可能会有所不同,而人们仍然可以像这样使用数组:a[y][x].我希望我的数组也有一个真正的2D数组的内存布局.

实现这种真正2D阵列分配的正确方法是什么?

编辑#1: 分配方法的返回类型可以是指向已分配数组的指针.

Jen*_*edt 5

您不需要特殊功能.就这样做吧

double (*A)[n][m] = malloc(sizeof *A);
Run Code Online (Sandbox Code Playgroud)

作为C99的,这里nm可以是你想要的任何正整数表达式.

这样的东西是指向VLA,可变长度数组的指针.