C - Динамически инициализирующие массивы - PullRequest
0 голосов
/ 26 ноября 2009

Я пытаюсь найти эквивалент int myArray [n], за исключением того, что я не знаю, что n без ввода.

Должен ли работать следующий код? (Мне нужно использовать kmalloc вместо malloc).

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

Отладка с использованием gdb, страницы значений [0], по-видимому, не равны 0 - это ожидаемо?

Ответы [ 3 ]

5 голосов
/ 26 ноября 2009

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

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

3 голосов
/ 26 ноября 2009

Да. Память не инициализирована, вы просто получаете указатель на ваш кусок памяти.

Вам потребуется memset, чтобы инициализировать его:

memset(pages, 0, npages * sizeof(int));

Кроме того, если я не ошибаюсь kmalloc принимает второй параметр , тип памяти для выделения.

0 голосов
/ 25 апреля 2012

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

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...