2013-10-28 94 views
0

我在分配內存時遇到了問題,就是Linux內核空間。我用下面的兩個結構中創建了鏈接列表:Linux內核空間中的動態內存分配

struct Node{ 
    char *ptr; 
    struct Node *next; 
}; 

struct List{ 
    struct Node *head; 
    struct Node *tail; 
}; 

現在,當我嘗試和分配列表結構[編輯,以反映正確的代碼]:

struct List *ll = kmalloc(sizeof(struct List), GFP_KERNEL) 

我得到:

error: Initializer element is not constant 

我在這裏做錯了什麼?我想補充的指針節點在我的列表結構因此我會通過添加它們:

struct Node n* = kmalloc(sizeof(Node)); 
n -> ptr = "Blah"; 
n -> next = NULL; 
ll -> head = n; 
+0

我很確定Linux內核頭文件有鏈接列表的一些宏.... [here](http://kernelnewbies.org/FAQ/LinkedLists) –

+0

謝謝,如果這不起作用,我會檢查一下。我之前看到了這一點,但認爲自己編碼會更容易。 C嚇到我了! – Alex

+0

如果您希望稍後將代碼提交到內核中,您應該正確使用*內核的習慣和編碼規則。如果您被C嚇到了,則應該先編碼用戶級應用程序,而不是內核代碼。 –

回答

2

struct List ll*; 

struct List *ll; 

你有你的類型定義這個權利,但在kmalloc這兩行中都是錯誤的。

+0

我的錯誤,我有結構列表* ll;在我的代碼中,我必須複製它錯誤。這並沒有解決我的問題,仍然出現錯誤。 – Alex

0

ERROR與內核編程無關,它與c編程有關。

error: Initializer element is not constant 

代碼:

struct List{ 
    struct Node *head; 
    struct Node *tail; 
}; 
struct List *ll = kmalloc(sizeof(struct List), GFP_KERNEL) 

結構對象(默認)具有靜態存儲類。 使用靜態存儲持續時間的對象初始化必須使用常量表達式。 嘗試在main()函數內分配內存。

具有靜態持續時間的對象在外部函數中聲明,或者在內部聲明爲 關鍵字extern或static作爲聲明的一部分。這些只能在編譯時初始化。即不斷的表達式