我試圖找到相當於int myArray [n],除了我不知道什麼n沒有輸入。C - 動態初始化數組
下面的代碼應該工作嗎? (我需要使用kmalloc而不是malloc)。
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
使用gdb進行調試時,值頁面[0]看起來不是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 - 這是預期的嗎?
是的。內存沒有初始化,你只是得到一個指向你的內存塊的指針。
你需要memset
將其初始化:
memset(pages, 0, npages * sizeof(int));
而且,除非我弄錯kmalloc
需要second parameter,內存分配的類型。
malloc
返回一個指向它爲數組分配的堆上某個位置的指針。它不會初始化該內存。您可以使用calloc
而不是malloc
將內存初始化(設置爲零),或者在分配內存並將內存設置爲零後,您可以使用memset
。
由於您使用的是kmalloc
,因此您可能必須使用memset
;我不相信有一個在內核中分配初始化內存。
另外,您可以使用內核功能kzalloc:
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
感謝您的加入例子! – stringo0 2009-11-26 02:23:49