C 使用列表在内核设备中存储值

C 使用列表在内核设备中存储值,c,linux-kernel,kernel,kernel-module,C,Linux Kernel,Kernel,Kernel Module,我正在编写一个小型内核设备,需要将值存储在列表中。将第一个条目添加到列表中可以正常工作,但下一个条目会触发错误。有人能告诉我为什么吗?我的代码如下;我在Fedora18中使用内核3.6.10-4.fc18.x86_64 LIST_HEAD(dns_list_lp ) ; static void add_dns_list(__be32 v4address,struct in6_addr v6address) { struct dns_nat node; INIT_LIST_HEAD( &

我正在编写一个小型内核设备,需要将值存储在列表中。将第一个条目添加到列表中可以正常工作,但下一个条目会触发错误。有人能告诉我为什么吗?我的代码如下;我在Fedora18中使用内核3.6.10-4.fc18.x86_64

LIST_HEAD(dns_list_lp ) ;

static void add_dns_list(__be32 v4address,struct in6_addr v6address)
{    
struct dns_nat node;
INIT_LIST_HEAD( &node.dns_list);
node.dns_v4address=v4address;
node.dns_v6address=v6address;
list_add_tail ( &node.dns_list , &dns_list_lp );
}

每次调用
添加dns列表
时,您都在初始化列表。

每次调用
添加dns列表
时,您都在初始化列表。

每次调用
添加dns列表
时,您都在初始化列表。

每次调用
添加dns列表
时,您都在初始化列表。

存储指向局部变量的指针。您必须记住,一旦函数返回变量
节点的生存期结束,列表中的指针将不再有效。

您将尝试存储指向局部变量的指针。您必须记住,一旦函数返回变量
节点的生存期结束,列表中的指针将不再有效。

您将尝试存储指向局部变量的指针。您必须记住,一旦函数返回变量
节点的生存期结束,列表中的指针将不再有效。

您将尝试存储指向局部变量的指针。您必须记住,一旦函数返回变量
节点的生存期结束,列表中的指针就不再有效。

hi,谢谢,我会更正它。我将不得不使用一个指针和使用kmalloc来分配内存,这样就可以了。这是最好的解决办法吗。每次在add_dns_list()@user2714949中调用kmalloc时是否会出现内存泄漏如果您记得在处理完数据后释放数据,则不会出现内存泄漏。您好,谢谢,我会更正它。我将不得不使用一个指针和使用kmalloc来分配内存,这样就可以了。这是最好的解决办法吗。每次在add_dns_list()@user2714949中调用kmalloc时是否会出现内存泄漏如果您记得在处理完数据后释放数据,则不会出现内存泄漏。您好,谢谢,我会更正它。我将不得不使用一个指针和使用kmalloc来分配内存,这样就可以了。这是最好的解决办法吗。每次在add_dns_list()@user2714949中调用kmalloc时是否会出现内存泄漏如果您记得在处理完数据后释放数据,则不会出现内存泄漏。您好,谢谢,我会更正它。我将不得不使用一个指针和使用kmalloc来分配内存,这样就可以了。这是最好的解决办法吗。每次在add_dns_list()@user2714949中调用kmalloc时是否会出现内存泄漏如果您记得在处理完数据后释放数据,则不会出现内存泄漏。