我是C語言的新手,我需要創建一個隊列,如果我需要使用malloc(內存分配)以及如何使用它,我不需要。我運行添加,刪除,大小和isempty沒有malloc和它的工作。Malloc in C爲什麼要使用它
void e1_init(e1queue_t* q){
q->head = 0;
q->tail = sizeof(q->queue)/sizeof(int)-1;
q->size=0;
}
謝謝。
我是C語言的新手,我需要創建一個隊列,如果我需要使用malloc(內存分配)以及如何使用它,我不需要。我運行添加,刪除,大小和isempty沒有malloc和它的工作。Malloc in C爲什麼要使用它
void e1_init(e1queue_t* q){
q->head = 0;
q->tail = sizeof(q->queue)/sizeof(int)-1;
q->size=0;
}
謝謝。
時的動態存儲器分配是指通過一組功能中的C標準庫,即malloc的,realloc的,釋放calloc和在C程序設計語言執行動態存儲器分配免費
語法:
說明:
malloc()
返回一個指向我的一大塊功能大小的大小,如果有錯誤,則爲NULL。指向的內存將堆在堆上,而不是堆棧中,因此在完成時請確保釋放它。
實施例:
typedef struct data_type {
int age;
char name[20];
} data;
data *bob;
bob = (data*) malloc(sizeof(data));
if(bob != NULL) {
bob->age = 22;
strcpy(bob->name, "Robert");
printf("%s is %d years old\n", bob->name, bob->age);
}
free(bob);
在C中,有兩種類型的內存:
堆棧內存相當有限,用於函數中的自動變量,處理開銷等等。
當你需要更大塊的內存時,你需要從heap
得到它。
不是這個答案完全相同的副本,但是這似乎是一個很好的說明:
C標準沒有使用'堆棧'或'堆'這樣的術語 – user411313
@ user411313 - 同意,C標準也沒有說一個字節是8位長。有些事情非常普遍,但是,他們幾乎被認爲是理所當然的。在實際上沒有堆棧的系統上,可以模擬堆棧。 (VM/CMS) –
有許多理由來使用malloc()函數。
malloc()用於爲變量動態分配內存。 爲什麼? 動態分配內存的原因有很多。例如,如果某個對象/變量的大小在COMPILE時間未知,並且稍後有可能需要增加該大小,則需要增加內存需求。並且這是malloc進來的地方。
malloc()用於初始化指針 爲什麼? 未初始化的指針指向一個隨機位置。此位置可能無法訪問,並可能導致程序崩潰。當使用malloc時,它會增加堆的存儲空間,並將隨機初始化的指針指向可以讀/寫的「理智」位置。
我在e1_init中使用malloc並在哪裏使用free?謝謝 – tomss