C - Dynamisch initialisieren von arrays
-
05-07-2019 - |
Frage
Ich bin auf der Suche nach dem äquivalent zu int myArray[n], wenn ich nicht weiß was n ist ohne Eingabe.
Ist der folgende code funktionieren soll?(Ich kmalloc statt malloc).
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
Debuggen mit gdb der Wert pages[0] scheint nicht 0 sein - ist dies zu erwarten?
Lösung
Ja. Speicher nicht initialisiert wird, erhalten Sie nur einen Zeiger auf Ihren Teil des Speichers.
Sie müssen memset
es initialisieren:
memset(pages, 0, npages * sizeof(int));
Auch wenn ich nicht irre kmalloc
bin nimmt eine zweiten Parameter , die Art der Speicher zuzuweisen.
Andere Tipps
malloc
gibt einen Zeiger auf einen Ort auf der Haufen, der es reserviert hat für das array.Es nicht initialisiert wird, dass der Speicher.Sie können verwenden calloc
statt malloc
die Speicher initialisiert werden (auf null gesetzt), oder Sie können Sie mit memset
nachdem Sie den Speicher und setzen Sie den Speicher auf null selbst.
Da Sie über kmalloc
, wahrscheinlich werden Sie haben zu verwenden memset
;Ich glaube nicht, dass es ein cmalloc
für die Zuteilung von initialisierten Speicher im kernel.
Alternativ können Sie die Kernel-Funktion kzalloc :
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);