2013-10-28 3 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 имеют некоторые макросы для связанных списков ... См., например, [здесь] (http://kernelnewbies.org/FAQ/LinkedLists) –

+0

Спасибо, я проверю это, если это не сработает. Я видел это раньше, но подумал, что легче самому закодировать его. C пугает меня! – Alex

+0

Если вы хотите позже отправить свой код в ядро, вы должны использовать право * сейчас * правила поведения и кодирования ядра ... и если вы боитесь C, вы должны начать с кодирования приложений на уровне пользователя, а не код ядра. –

ответ

2

Не

struct List ll*; 

но

struct List *ll; 

Вы получили это право в определениях типа , но неправильно в обеих строках с kmalloc.

+0

Моя ошибка У меня была структура List * ll; в моем коде, я, должно быть, скопировал это неправильно. Это не устранило мою проблему, все еще получая ошибку. – Alex

0

ОШИБКА не связана с программированием ядра, это связано с программированием на 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().

Объекты со статической продолжительностью объявляются либо внешними функциями, либо внутри них с ключевым словом или статическими как часть декларации. Они могут быть инициализированы только во время компиляции. то есть с постоянным выражением

Смежные вопросы