2013-11-10 4 views
0
#include<linux/fs.h> 
#include<linux/uaccess.h> 
#include<linux/slab.h> 
#include<linux/gfp.h> 
//#include<linux/types.h> 

//#include<linux/kernel.h> 
//#include<linux/module.h> 

char *my_buff = (char*)kmalloc(100,GFP_KERNEL); 
char *buff = "Linux Device Drivers programming!"; 

Это часть программы. Я получаю сообщение об ошибке: «Элемент Initialiser не является константой». Невозможно выяснить, что может быть причиной ошибки.Элемент инициализатора не является постоянным

+0

[не отбрасывают возвращаемое значение 'таНос()'] (http://stackoverflow.com/questions/605845/do-i-cast- the-result-of-malloc/605858 # 605858) –

+0

Возможный дубликат элемента инициализации [Error "не является константой" при попытке инициализировать переменную с константой] (http://stackoverflow.com/questions/3025050/error-initializer- элемент-это-не-постоянная при попытке-к-инициализации переменной ш); Однако это: http://stackoverflow.com/q/13620654/694576 подходит еще лучше. – alk

ответ

2

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

char *my_buff; 
main() 
{ 
    my_buff = kmalloc(100,GFP_KERNEL); 
    ... 
} 
2

Ваша переменная my_buff находится за пределами области действия, и вы инициализируете ее из непостоянного результата, то есть возвращаемого значения kmalloc. Вы не можете этого сделать - вам нужно инициализировать my_buff в некоторой функции, которая вызывается до ее использования, или сделать инициализатор постоянной времени компиляции (что, вероятно, невозможно в случае указателя, хотя вы, возможно, сможете изменить его на char my_buff[100]).

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