Вопрос

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

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

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

При отладке с помощью GDB значение Pages[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