【发布时间】:2013-11-06 16:09:12
【问题描述】:
我在分配内存时遇到问题是 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;
【问题讨论】:
-
我很确定 Linux 内核头文件有一些用于链接列表的宏......参见例如here
-
谢谢,如果这不起作用,我会检查一下。我早些时候看到了这个,但认为自己编写代码会更容易。 C 吓到我了!
-
如果你想稍后提交你的代码到内核中,你应该现在使用内核的习惯和编码规则......如果你害怕C 你应该从编写用户级应用程序开始,而不是内核代码。
-
我不想将它提交到内核中。我希望我可以,但这是课程的要求。
-
那我希望你的老师要求你遵循内核习惯。所以你需要了解如何将现有的宏用于列表。
标签: c linux memory-management struct kernel