2016-01-29 41 views
0

我有一個while循環,在while循環的每個itteration中malloc一個struct對象。然後在循環結尾,我將它添加到鏈表的末尾。現在我關心的是,當我每次在循環中使用malloc時,我都有相同的變量名,所以我不明白在將最新的malloced對象附加到鏈表之後它是如何工作的,然後我將mableced的其他變量一樣的名字。以這種方式mallocing一個對象是非法的嗎?

我的代碼:

struct Student{ 
    char *name; 
    int IDno; 
}Student; 

someFunction(){ 
x = 0; 

while(x!=6){ 
    Student *name = malloc(sizeof(Student)); <----- Confusion here 

    addToLinkedList(LinkedListStruct,name); 
} 

它是正常的,我有name被在每次循環malloced。有人可以向我解釋如果我以這種方式使用malloc會發生什麼情況,將它添加到鏈表的末尾,然後進入下一個循環並執行相同操作。

回答

1

malloc()調用與您指定其返回值的變量的名稱沒有任何關係。 malloc()不知道您將其返回值分配給名爲name的變量。你所做的是完全有效和明確的。

雖然malloc()返回指向內存區域的指針,但不是內存本身,但代碼仍然存在錯誤。因此,聲明應該是

Student *name = malloc(sizeof (Student)); 
+0

這是一個很好的做法,將結果轉換爲正確的類型,在本例中爲'Student *'。 –

+2

它實際上**非常糟**實踐 - http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – Idos

+0

@JohnSensebe,沒有什麼是好的。 – SergeyA

相關問題