Question

J'essaie de trouver l'équivalent de int myArray [n], sauf que je ne sais pas ce que n est sans entrée.

Le code suivant est-il censé fonctionner? (Je dois utiliser kmalloc au lieu de malloc).

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

En déboguant avec gdb, la valeur des pages [0] ne semble pas être 0 - est-ce attendu?

Était-ce utile?

La solution

Oui. La mémoire n'est pas initialisée, vous obtenez juste un pointeur sur votre bloc de mémoire.

Vous devez memset pour l'initialiser:

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

De plus, à moins que je ne me trompe, kmalloc prend un deuxième paramètre , type de mémoire à allouer.

Autres conseils

malloc renvoie un pointeur sur un emplacement du tas alloué pour votre tableau. Il n'initialise pas cette mémoire. Vous pouvez utiliser calloc au lieu de malloc pour initialiser la mémoire (valeur zéro), ou vous pouvez utiliser memset après avoir alloué la mémoire. et réglez la mémoire sur zéro vous-même.

Puisque vous utilisez kmalloc , vous devrez probablement utiliser memset ; Je ne crois pas qu'il existe un cmalloc pour allouer de la mémoire initialisée dans le noyau.

Vous pouvez également utiliser la fonction du noyau de kzalloc . :

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top