Linux kernel 如何释放内核中的内存

Linux kernel 如何释放内核中的内存,linux-kernel,Linux Kernel,我在内核模块中有以下代码行。KFREE行导致操作系统挂起。没有它,KEDR报告内存泄漏。那么我如何释放p char * p = KMALLOC(100, GFP_ATOMIC); p = dentry_path_raw(dentry, p, 100) ; printk(KERN_EMERG " %s" , p); KFREE(p); KFREE的定义如下: # define KFREE(a) kfree((a)) # define KMALLOC(a,b) kmalloc((a),(

我在内核模块中有以下代码行。KFREE行导致操作系统挂起。没有它,KEDR报告内存泄漏。那么我如何释放p

char * p = KMALLOC(100, GFP_ATOMIC);
p = dentry_path_raw(dentry, p, 100) ;
printk(KERN_EMERG " %s" , p);
KFREE(p);
KFREE的定义如下:

# define KFREE(a)   kfree((a))
# define KMALLOC(a,b)   kmalloc((a),(b))
KMALLOC的定义如下:

# define KFREE(a)   kfree((a))
# define KMALLOC(a,b)   kmalloc((a),(b))

您需要第二个变量来存储调用
dentry\u path\u raw(dentry,p,100)
的返回值。现在,你正在释放任何回报,而不是你分配的。谢谢。实际上我刚刚改变了这个:p=dentry\u path\u raw(dentry,p,100);到这个dentry_path_raw(dentry,第100页);这让它起作用了。我不需要返回值。。这是一个愚蠢的错误。再次感谢您,您如何确切地知道返回字符串的开头?您必须使用返回值。您需要另一个变量来存储调用
dentry\u path\u raw(dentry,p,100)
的返回值。现在,你正在释放任何回报,而不是你分配的。谢谢。实际上我刚刚改变了这个:p=dentry\u path\u raw(dentry,p,100);到这个dentry_path_raw(dentry,第100页);这让它起作用了。我不需要返回值。。这是一个愚蠢的错误。再次感谢您,您如何确切地知道返回字符串的开头?您必须使用返回值。