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

时间:2011-09-19 10:33:05

标签: c malloc typedef

我目前使用多维数组的遗留代码:

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

我需要通过动态值更改B常量。问题是,我需要像以前那样保持表格,这样除了重写分配之外我不会有任何其他内容。

我想就你如何做这样的事情提出自己的想法/意见。

目前我正在尝试键入表格的末尾([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];

3 个答案:

答案 0 :(得分:2)

你输错了类型:

int32_t* Table[A];

实际上应该是

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

或者,当你输入它时

type_2_t *Table[A];

这应该可以解决问题。

答案 1 :(得分:0)

眼睛受伤!
为什么不将它声明为int * * * * * *表和malloc它在5个嵌套for循环中?这样,如果任何其他维度决定变得动态,你将来会证明:)

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

免责声明:我很可能错误地指出了间接数量。

答案 2 :(得分:-1)

#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);
    }