我目前使用多维数组的遗留代码:
#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];
答案 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);
}