2012-10-20 88 views
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; 
    } 

謝謝。

回答

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 dynamic memory allocation

+0

我在e1_init中使用malloc並在哪裏使用free?謝謝 – tomss

1

在C中,有兩種類型的內存:

  • 堆棧
  • 的堆

堆棧內存相當有限,用於函數中的自動變量,處理開銷等等。

當你需要更大塊的內存時,你需要從heap得到它。

不是這個答案完全相同的副本,但是這似乎是一個很好的說明:

What and where are the stack and heap?

+0

C標準沒有使用'堆棧'或'堆'這樣的術語 – user411313

+1

@ user411313 - 同意,C標準也沒有說一個字節是8位長。有些事情非常普遍,但是,他們幾乎被認爲是理所當然的。在實際上沒有堆棧的系統上,可以模擬堆棧。 (VM/CMS) –

0

有許多理由來使用malloc()函數。

  1. malloc()用於爲變量動態分配內存。 爲什麼? 動態分配內存的原因有很多。例如,如果某個對象/變量的大小在COMPILE時間未知,並且稍後有可能需要增加該大小,則需要增加內存需求。並且這是malloc進來的地方。

  2. malloc()用於初始化指針 爲什麼? 未初始化的指針指向一個隨機位置。此位置可能無法訪問,並可能導致程序崩潰。當使用malloc時,它會增加堆的存儲空間,並將隨機初始化的指針指向可以讀/寫的「理智」位置。

  3. 此外,用malloc初始化的指針可以使用realloc()方法調整大小。這使得內存管理變得靈活(並且容易出錯)
+0

我在e1_init使用malloc?免費使用它的地方?在e1_end()處感謝 – tomss

+0

,在退出程序之前應該調用它以取消初始化(或釋放)隊列中的所有節點。請注意,它需要在循環中調用以釋放所有節點。 –

+0

所以我只需要用free來刪除整個隊列呢?如果我有一個malloc,我將不得不使用免費的? – tomss

相關問題