Pergunta

Eu estou tentando encontrar o equivalente a int myArray [n], só que eu não sei o que n é sem entrada.

O código a seguir deve funcionar? (Eu preciso usar kmalloc em vez de malloc).

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

Depuração usando gdb, as páginas de valor [0] não parece ser 0 -? É este esperado

Foi útil?

Solução

Sim. A memória não é inicializado, você só obter um ponteiro para o seu pedaço de memória.

Você precisará memset para inicializar-lo:

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

Além disso, se não estou enganado kmalloc leva um segundo parâmetro , o tipo de memória para alocar.

Outras dicas

malloc retorna um ponteiro para algum local na pilha que alocou para o seu array. Ele não inicializar a memória. Você pode usar calloc vez de malloc ter a memória ser inicializado (set a zero), ou você pode usar memset depois de alocar a memória e definir a memória a zero mesmo.

Uma vez que você estiver usando kmalloc, você provavelmente vai ter que usar memset; Eu não acredito que há uma cmalloc para alocação de memória inicializado no kernel.

Como alternativa, você pode usar a função de kernel kzalloc :

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top