比方說,我有一個結構是作爲C中是否自動初始化malloc?
typedef struct mylist {
int head;
int tail;
int size;
buckets_t *bucketslots;
} mylist_t;
這樣的列表,然後
void create_list(mylist_t* list, int size) {
list->head = 0;
list->tail = 0;
list->size = size;
list->bucketslots = malloc(sizeof(bucket_t) * size);
}
現在,在我的主要方法,如果我執行:
mylist_t list1;
create_list(&list1, 1000);
請問倒數第二行自動malloc空間爲list1?或者,我是否需要明確malloc空間通過
malloc(sizeof(mylist_t))
?
我真的很想知道的是,如果這是一個有效的過程來製作一個mylist類型的結構並開始在main中使用它。
編輯
看來是c把列表1,當我宣佈倒數第二行中的堆棧,但它並不在堆中去。如果我想把它放在堆上,我應該做下面的事情嗎? :
mylist_t* create_list(int size) {
mylist_t list1 = malloc(sizeof(mylist_t));
list->head = 0;
list->tail = 0;
list->size = size;
list->bucketslots = malloc(sizeof(bucket_t) * size);
return list1;
}
然後調用函數:
create_list(1000);
有了這個,我會在整個程序訪問列表1?
line mylist_t list1;'當在塊範圍內時,創建一個具有自動存儲持續時間的'mylist_t'類型的對象。有什麼不清楚的? – EOF
「list1」的空間在您聲明時分配了!它不是一個需要分配內存的指針變量。 – skrtbhtngr
對不起,我對C很新。當你說存儲時間時,你的意思是說內存中的空間是自動分配的嗎?這個空間是否等於sizeof(mylist_t)? –