Domanda

Sto cercando di trovare l'equivalente di int myArray [n], tranne per il fatto che non so cosa sia n senza input.

Il seguente codice dovrebbe funzionare? (Devo usare kmalloc invece di malloc).

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

Debug utilizzando gdb, le pagine dei valori [0] non sembrano essere 0 - è previsto?

È stato utile?

Soluzione

Sì. La memoria non è inizializzata, ottieni solo un puntatore al tuo pezzo di memoria.

Dovrai memset per inizializzarlo:

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

Inoltre, a meno che non mi sbagli kmalloc accetta un secondo parametro , il tipo di memoria da allocare.

Altri suggerimenti

malloc restituisce un puntatore in una posizione sull'heap che ha allocato per l'array. Non inizializza quella memoria. Puoi usare calloc invece di malloc per inizializzare la memoria (impostata su zero), oppure puoi usare memset dopo aver allocato la memoria e imposta la memoria su zero te stesso.

Dato che stai usando kmalloc , probabilmente dovrai usare memset ; Non credo ci sia un cmalloc per allocare memoria inizializzata nel kernel.

In alternativa potresti usare la funzione del kernel kzalloc :

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top