簡體   English   中英

在 C 中初始化結構指針的二維數組

[英]initializing a 2-D array of structs pointers in C

我在編譯時使用-std=gnu99 假設我有一個這樣的結構:

typedef struct Foo {
    char *quux;
    int baz;
} Foo;

我注意到您可以像這樣在堆中使用 NULL 值初始化一維結構數組:

Foo* bar[10] = {[0 ... 9] = NULL};

但是我將如何為堆上的二維數組執行此操作? 這是我的嘗試:

int depth = 10;
int length = 10;
Foo **bar;

bar = malloc(sizeof(Foo) * length);

for (int i = 0; i < length; i++) {

    bar[i] = (Foo*) calloc(depth, sizeof(Foo));

}

當我去釋放這個內存時,我會free() 10 次,還是 100 次? 那么 foo.quux 的可變長度呢?

  1. 首先,在以下行中有錯誤:

     bar = malloc(sizeof(Foo) * length);

應該

    bar = malloc(sizeof(Foo*) * length);

因為您想為 Foo* 分配足夠的空間,這將表示數組的開始。 原始行將為 Foo 分配空間。

  1. 如果您以上述樣式分配 2D 數組,則總共需要執行 11 個 free(),一個用於分配的每個子數組 (10),一個用於分配的指針數組。 IE

     for (int i = 0; i < length; ++i) { free(bar[i]); } free(bar);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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