2009-11-26 110 views
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 - 这是预期的吗?

回答

3

是的。内存没有初始化,你只是得到一个指向你的内存块的指针。

你需要memset将其初始化:

memset(pages, 0, npages * sizeof(int)); 

而且,除非我弄错kmalloc需要second parameter,内存分配的类型。

+0

感谢您的加入例子! – stringo0 2009-11-26 02:23:49

5

malloc返回一个指向它为数组分配的堆上某个位置的指针。它不会初始化该内存。您可以使用calloc而不是malloc将内存初始化(设置为零),或者在分配内存并将内存设置为零后,您可以使用memset

由于您使用的是kmalloc,因此您可能必须使用memset;我不相信有一个在内核中分配初始化内存。

0

另外,您可以使用内核功能kzalloc

int * pages; 
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);