[英]C : Static to dynamic allocation on multiple dimension array
我目前無法使用使用多維數組的舊代碼:
#define B 25
int Table[A][B][C][D][E][F];
我需要通過動態值更改B常數。 關鍵是,我需要將表保持以前的樣子,以便除重新分配之外沒有其他任何東西。
我想就如何做這樣的事情提出您的想法/意見。
目前,我正在嘗試對表的末尾([C] [D] [E])進行typedef,以便在分配時對其進行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 * * * * * * Table並在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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.