为“矩形二维数组”动态分配连续内存,而不使用 VLA

ilo*_*ang 4 c dynamic-memory-allocation

这是有很多答案但没有一个能解决具体问题的问题之一。

\n

我尝试查看所有这些帖子 \xe2\x80\x94\n 1 2 3 4 5 6 7 8 9 \ xe2\x80\x94 ,每次解决方案都是使用 VLA、使用具有固定尺寸的普通数组,或使用指针到指针。

\n

我想要的是分配:

\n
    \n
  • 动态(使用运行时设置的变量)
  • \n
  • 矩形(“二维数组”)(我不需要锯齿状数组。而且我想无论如何都不可能做到这一点。)
  • \n
  • 连续内存(在#8和其他一些帖子中,人们说指向指针的指针不好,因为堆的东西和碎片)
  • \n
  • 没有 VLA(我听说它们是魔鬼,要始终避免它们,并且不要与建议在任何情况下使用它们的人交谈)。
  • \n
\n

所以,如果我跳过了一篇文章,或者没有读得足够透彻,满足了这些要求,请指出它。
\n否则,我会要求您对此进行教育,并告诉我这是否可能,如果可能,该怎么做。

\n

Joh*_*ode 6

您可以动态分配连续的二维数组:

\n
int (*arr)[cols] = malloc( rows * sizeof (int [cols]) );\n
Run Code Online (Sandbox Code Playgroud)\n

然后访问元素作为arr[i][j].

\n

如果您的编译器不\xe2\x80\x99t 支持 VLA,则cols必须是常量表达式。

\n

  • `sizeof (int [rows][cols]) )` 也可以 (2认同)