2009-11-26 2 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

5

malloc возвращает указатель на некоторое место в куче, которое он выделил для вашего массива. Он не инициализирует эту память. Вы можете использовать calloc вместо malloc, чтобы память была инициализирована (установлена ​​на ноль), или вы можете использовать memset после выделения памяти и установки памяти на ноль самостоятельно.

Поскольку вы используете kmalloc, вам, вероятно, придется использовать memset; Я не верю, что есть для выделения инициализированной памяти в ядре.

0

В качестве альтернативы вы можете использовать функцию ядра kzalloc:

int * pages; 
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL); 
Смежные вопросы