我正在尝试找到int myArray [n]的等价物,除了我不知道没有输入的是什么。
以下代码是否有效? (我需要使用kmalloc而不是malloc)。
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
使用gdb进行调试,值页面[0]似乎不是0 - 这是预期的吗?
答案 0 :(得分:5)
malloc
返回指向堆已为您的数组分配的某个位置的指针。它没有初始化那个内存。您可以使用calloc
代替malloc
来初始化内存(设置为零),或者在分配内存并将内存设置为零后使用memset
。< / p>
由于您使用的是kmalloc
,因此您可能必须使用memset
;我不相信在内核中分配初始化内存有cmalloc
。
答案 1 :(得分:3)
是。内存未初始化,你只需要指向你的大块内存。
您需要memset
对其进行初始化:
memset(pages, 0, npages * sizeof(int));
另外,除非我误认为kmalloc
需要second parameter,即要分配的内存类型。
答案 2 :(得分:0)
或者你可以使用内核函数kzalloc:
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);