我试图找到相当于int myArray [n],除了我不知道什么n没有输入。C - 动态初始化数组
下面的代码应该工作吗? (我需要使用kmalloc而不是malloc)。
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
使用gdb进行调试时,值页面[0]看起来不是0 - 这是预期的吗?
我试图找到相当于int myArray [n],除了我不知道什么n没有输入。C - 动态初始化数组
下面的代码应该工作吗? (我需要使用kmalloc而不是malloc)。
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
使用gdb进行调试时,值页面[0]看起来不是0 - 这是预期的吗?
是的。内存没有初始化,你只是得到一个指向你的内存块的指针。
你需要memset
将其初始化:
memset(pages, 0, npages * sizeof(int));
而且,除非我弄错kmalloc
需要second parameter,内存分配的类型。
malloc
返回一个指向它为数组分配的堆上某个位置的指针。它不会初始化该内存。您可以使用calloc
而不是malloc
将内存初始化(设置为零),或者在分配内存并将内存设置为零后,您可以使用memset
。
由于您使用的是kmalloc
,因此您可能必须使用memset
;我不相信有一个在内核中分配初始化内存。
另外,您可以使用内核功能kzalloc:
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
感谢您的加入例子! – stringo0 2009-11-26 02:23:49