C:多维数组上的静态到动态分配



我目前被一个使用多维数组的遗留代码所困扰:

#define B 25
int Table[A][B][C][D][E][F];

我需要用一个动态值来改变B常数。问题是,我需要保持这个表和以前一样,这样除了重写的分配之外,我就没有其他东西了。

我想听听你对如何做这样一件事的想法/意见。

目前,我正在尝试对表的末尾进行typedef([C][D][E](,以便在分配时对其进行malloc,但我遇到了一些错误,比如表没有像遗留代码所希望的那样。。。

//int32_t Table[A][B][C][D][E][F];
int32_t* Table[A];
typedef int32_t type_1_t[E][F];
typedef type_1_t type_2_t[C][D];
for (int i = 0; i < A; i++)
  Table[i] = (int32_t*) malloc (sizeof (type_2_t) * dynamic_B);

使用它,我在使用该表时会得到一个错误("错误:下标值既不是数组,也不是指针或向量"(。

XXX = Table [a][b][c][d][e][f];

您的类型错误:

int32_t* Table[A];

实际上应该是

int32_t (*Table[A])[C][D][E][F];

或者,当你输入时

type_2_t *Table[A];

这应该奏效。

眼睛受伤了
为什么不将其声明为int***表,并在5个嵌套for循环中对其进行malloc?这样,如果任何其他维度决定动态化,你就可以经得起未来考验:(

Table = malloc(A * sizeof(int *****));
for (i=0; i<A; ++i)
{
  Table[i] = malloc(B * sizeof(int ****));
  for (i1=0; i1<B; ++i1)
  {
     ...
  }
}

免责声明:我很可能弄错了间接引语的数量。

#define  SIZE_B (C*D*E*F*sizeof(int32_t))
int32_t***** Table[A];

or (int i = 0; i < A; i++)
  Table[i] = (int32_t*****) malloc ( SIZE_B * dynamic_B);

编辑2:上面的代码完全没有任何作用,完全是垃圾。留下它作为一个提醒,在我发布之前彻底检查代码

编辑3:这就像一个魅力在这里,最后:(

#define SIZE_B (C*D*E*F*sizeof(int))
typedef int t2[C][D][E][F];

    t2* ar[A];
    int dynB = 3;
    for(int i=0;i<A;i++)
    {
        ar[i] = (t2*)malloc(SIZE_B * dynB);
    }

相关内容

  • 没有找到相关文章

最新更新