0

我在分配内存时遇到问题是 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

我在这里做错了什么?我想在我的 List 结构中添加指向节点的指针,所以我可以通过以下方式添加它们:

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

2 回答 2

2

不是

struct List ll*;

struct List *ll;

您在类型定义中做到了这一点,但在kmalloc.

于 2013-10-28T00:34:08.807 回答
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 作为声明的一部分声明。这些只能在编译时初始化。即,具有常量表达式

于 2013-10-29T06:33:14.797 回答