2009-11-26 109 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);