2009-08-01 70 views
-1

任何人都可以請解釋一下嗎?malloc()函數C

struct node 
{ 
    int data; 
    struct node * link; 
} 
main() 
{ 
    struct node *p, *list, *temp; 
    list = p = temp = NULL; 
    ......................... 
    ......................... 
} 

addbeg() 
{ 
    int x; 
    temp=malloc(sizeof(struct node)); 
    scanf("%d", &x); 
    temp->data=x; 
    temp->link = list; 
    list=temp; 
} 

這是通過C語言在鏈接列表中輸入數據的代碼。代碼不完整,但我認爲它足夠的目的。請主要講解編碼這些行:

temp=malloc(sizeof(struct node)); 

temp->link = list; 
list=temp;. 

回答

9

malloc()用於分配內存 - 在這種情況下用於新節點。

在你的代碼中定義的函數addbeg()執行以下操作:

  1. 定義一個臨時變量x
  2. 爲新節點分配空間。
  3. 輸入整數(%d代碼至scanf)並將其存儲在x中。
  4. 將新保存到x的值存儲到新分配的節點的數據字段中。
  5. 將變量'list'指向的列表的舊「頭部」存儲爲新分配的節點中的鏈接。
  6. 將新節點設置爲變量'list'中存儲的列表的新頭部。

這是整數的鏈表(http://en.wikipedia.org/wiki/Linked_list)的一個非常基本的實現。

+2

你可以有用地添加一個註釋,說明代碼應該最終確保每個分配的內存使用`free()`釋放,嘟about'內存泄漏'和'對於小型學習程序來說並不重要,長期跑步的人「,所以你也可以學習如何在小型學習課程上做到這一點。 – 2009-08-01 16:24:01

+1

雖然他的程序無法正常工作,除非`list`和`temp`被傳遞給addbeg(),否則addbeg()被定義在main中。 – 2009-08-01 20:09:25

0

的malloc一個新的節點分配空間。

temp->link = list 

list = temp 

使得新的節點列表的頭部。

0

第一行:爲列表的單個附加節點分配內存。

第二行:附加當前列表作爲此元素後面的延續。

第三行:使當前元素成爲列表的開始。

0

運算符'sizeof'用於計算數據類型的大小。 運算符計算應在結構節點上分配多少空間。 malloc - 爲新結構分配內存。 請記住,如果您使用malloc方法分配內存,則您必須始終使用方法釋放此內存使用免費方法。

free(tmp); 

如果您不調用此方法,則會導致內存泄漏。這在C中非常重要。

[操作的sizeof] [1] http://en.wikipedia.org/wiki/Sizeof

0

溫度和列表不是addbeg可見的,因爲他們在主會宣佈。他們或者需要被傳遞給addbeg或者在main(全局,yuck)之外聲明。