0

Linux カーネル空間であるメモリの割り当てに問題があります。以下の 2 つの構造体を使用してリンク リストを作成しました。

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;
4

2 に答える 2

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 を使用してそれらの内側で宣言されます。これらはコンパイル時にのみ初期化できます。つまり、定数式で

于 2013-10-29T06:33:14.797 に答える