C - matrizes dinamicamente inicializar
-
05-07-2019 - |
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
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);