C linux内核链接列表的列表项返回随机值
我有一个名为:minor_arr的链表数组。 节点的类型是msg。 我正在尝试将新节点添加到链接列表中。 当我试图读取任何条目的值时,问题就开始了。我得到随机值。 有人知道为什么吗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; 在代
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