簡體   English   中英

C:在多維數組上靜態分配給動態分配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM