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

以下代码是否有效? (我需要使用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 需要第二个参数,即要分配的内存类型。

其他提示

malloc 返回指向堆已为您的阵列分配的某个位置的指针。它没有初始化那个内存。您可以使用 calloc 代替 malloc 来初始化内存(设置为零),或者在分配内存后可以使用 memset 并自己设置内存为零。

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

或者你可以使用内核函数 kzalloc

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top