C linux内核链接列表的列表项返回随机值

C linux内核链接列表的列表项返回随机值,c,linux,memory-management,linked-list,linux-kernel,C,Linux,Memory Management,Linked List,Linux Kernel,我有一个名为:minor_arr的链表数组。 节点的类型是msg。 我正在尝试将新节点添加到链接列表中。 当我试图读取任何条目的值时,问题就开始了。我得到随机值。 有人知道为什么吗 typedef struct { struct list_head list; char msg_value[msg_len]; short len; int channel_id; } msg; static struct list_head **minor_arr; 在代

我有一个名为:minor_arr的链表数组。 节点的类型是msg。 我正在尝试将新节点添加到链接列表中。 当我试图读取任何条目的值时,问题就开始了。我得到随机值。 有人知道为什么吗

typedef struct {
    struct list_head list;
    char msg_value[msg_len];
    short len;
     int channel_id;

} msg;

static struct list_head  **minor_arr;
在代码中:

    char *priv_buffer;
    new_msg = kcalloc(sizeof(msg), 1, GFP_KERNEL);
    INIT_LIST_HEAD(&new_msg->list);
    new_msg->channel_id=channel_id;//something is wrong here, can't set right channel_id

    priv_buffer = new_msg->msg_value;
    debug("device write before for");
    printk("%zu",length);
    for (i = 0; i < length; i++)
        get_user(priv_buffer[i], &buffer[i]);
    list_add(minor_arr[minor], &new_msg->list);
    printk("A:channel id in new_msg list should be %d and it's %d",channel_id,list_entry(minor_arr[minor], msg, list)->channel_id);
    return i;

次要arr分配在哪里?添加到列表的第一个参数是元素,第二个是列表。您似乎错误地为该函数指定了参数(根据您的说法,
minor\u arr[minor]
是一个列表,您希望向其中添加消息)。另外,
list\u条目(minor\u arr[minor],msg,list)
没有意义:您试图将list(
minor\u arr[minor]
)解释为元素。因为
minor\u arr
是一个
结构列表头**
,它指向一个
struct list\u head*
数组,每个元素都需要指向一个初始化的
struct list\u head
。你能展示一下代码吗?然后
list\u add(minor\u arr[minor],&new\u msg->list)应该是
list\u add(&new\u msg->list,minor\u arr[minor[);
然后是
list\u条目(minor\u arr[minor],msg,list)
应该是
list\u first\u条目(minor\u arr[minor],msg,list)
因为新条目被添加到了列表的前面。在哪里分配了minor\u arr?list\u add
的第一个参数是element,第二个参数是list。您似乎错误地为该函数指定了参数(根据您的说法,
minor\u arr[minor]
是一个列表,您想在其中添加消息)。此外,
list\u条目(minor\u arr[minor],msg,list)
没有意义:您试图解释列表(
minor\u arr[minor]
)由于
minor\u arr
是一个
struct list\u head**
,它指向一个
struct list\u head*
数组,每个元素都需要指向一个初始化的
struct list\u head
。你能显示那个代码吗?然后
list\u add(minor\u arr[minor],&new\u msg->list)
应该是
list\u add(&new\u msg->list,minor\u arr[minor[);
然后是
list\u条目(minor\u arr[minor],msg,list)
应该是
list\u first\u条目(minor\u arr[minor],msg,list)
,因为新条目已添加到列表的前面。
[   21.704368] A:channel id in new_msg list should be 11 and it's -730005930