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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top