2011-07-18 26 views
1
// creating a struct to store number of cd's, titles, and count 
struct CD_type_node 
{ 
    int cd_number; 
    char title[20]; 
    int count; 
    struct CD_type_node* next; 
}; 

struct CD_type_node* mylist = NULL; // declaring a struct of type CD_type_node 
struct CD_type_node* header;// head pointer for accessing linked list 
header = NULL; 

header = malloc(sizeof(struct mylist)); 
header = mylist; 

while(header != NULL) 
{ 
    header = header->next; 
} 

有人可以告訴我如何正確地創建一個鏈表,以及如何分配內存動態,因爲即時得到一個錯誤:的sizeof‘「的無效申請’,以完整的結構MYLIST如何正確地創建一個鏈表

+3

難道你不是指'sizeof(struct CD_type_node)'? –

+0

哈,你打我吧,dark_charlie。 – Patrick87

+0

有人糾正我,如果我錯了,但當你分配'頭'到你創建的新內存然後重新分配給'mylist'這是NULL是不是你創建一個內存泄漏?也許你打算把'malloc'分配給'mylist'。 – Grambot

回答

2

您需要使用sizeof(struct CD_type_node)

3

你的問題是在這裏

header = malloc(sizeof(struct mylist)); 

因爲mylist是類型的變量,所以

header = malloc(sizeof(*mylist)); 

是細如

header = malloc(sizeof(struct CD_type_node)); 

struct mylist是錯誤的:它不名任一類型或從該類型可被提取的變量。

+0

我相信sizeof(mylist)是錯誤的,因爲mylist是指向CD_type_node的指針...不是實例。 – Patrick87

+0

@Thomas:你是對的......解決這個問題。 – dmckee

2

我想提取節點創建成這種形式的函數:

void AddNode(struct CD_type_node **head) 
{ 
    struct CD_type_node *newNode = malloc(sizeof(struct CD_type_node)); 
    newNode->next = *head; 
    *head = newNode; 
} 

爲了方便您可能要在結構中的其他領域傳遞,讓這個程序填寫具有這些值的新節點。但是這個例程爲您提供瞭如何執行分配和下一個指針代碼的想法。

+0

+1。完全同意。 –

+0

我看到謝謝 – user793384

相關問題