[英]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 的可變長度呢?
首先,在以下行中有錯誤:
bar = malloc(sizeof(Foo) * length);
應該
bar = malloc(sizeof(Foo*) * length);
因為您想為 Foo* 分配足夠的空間,這將表示數組的開始。 原始行將為 Foo 分配空間。
如果您以上述樣式分配 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.