我在分配内存时遇到麻烦是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;
答案 0 :(得分:2)
不
struct List ll*;
但
struct List *ll;
你在类型定义中得到了这个权利,但在使用kmalloc
的两行中都是错误的。
答案 1 :(得分: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作为声明的一部分。这些只能在编译时初始化。即,不断表达