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!";

これはプログラムの一部です。「初期化要素は定数ではありません」というエラーが表示されます。エラーの原因が何であるかを理解できません。

4

2 に答える 2

2

変数my_buffが関数のスコープ外にあり、定数ではない結果、つまり の戻り値から変数を初期化していますkmalloc。それを行うことはできません –my_buff使用する前に呼び出される関数で初期化するか、初期化子をコンパイル時の定数にする必要があります (ポインターの場合はおそらく不可能ですが、できる場合があります)。に変更しますchar my_buff[100])。

于 2013-11-10T09:09:48.517 に答える
2

静的メンバーを初期化しています。つまり、コンパイラはコンパイル時に値が何であるかを知る必要があります。コンパイル時にコンパイラが認識できない値を割り当てようとしていますが、実行時にエラーの原因を認識しています。以下のように関数に割り当ててみてください。

char *my_buff;
main()
{
    my_buff = kmalloc(100,GFP_KERNEL);
    ...
}
于 2013-11-10T09:16:41.367 に答える