C - 动态初始化数组

时间:2009-11-26 02:17:31

标签: c arrays initialization

我正在尝试找到int myArray [n]的等价物,除了我不知道没有输入的是什么。

以下代码是否有效? (我需要使用kmalloc而不是malloc)。

int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));

使用gdb进行调试,值页面[0]似乎不是0 - 这是预期的吗?

3 个答案:

答案 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);