Pregunta

Estoy tratando de encontrar el equivalente de int myArray [n], excepto que no sé qué es n sin entrada.

¿Se supone que el siguiente código funciona? (Necesito usar kmalloc en lugar de malloc).

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

Depurando usando gdb, el valor de las páginas [0] no parece ser 0, ¿se espera esto?

¿Fue útil?

Solución

Sí. La memoria no se inicializa, solo obtienes un puntero a tu parte de memoria.

Necesitará memset para inicializarlo:

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

Además, a menos que me equivoque, kmalloc toma un segundo parámetro , el tipo de memoria a asignar.

Otros consejos

malloc devuelve un puntero a alguna ubicación en el montón que ha asignado para su matriz. No inicializa esa memoria. Puede usar calloc en lugar de malloc para inicializar la memoria (configurada a cero), o puede usar memset después de asignar la memoria y configura la memoria a cero tú mismo.

Dado que está utilizando kmalloc , probablemente tendrá que usar memset ; No creo que haya un cmalloc para asignar memoria inicializada en el kernel.

Alternativamente, puedes usar la función del kernel kzalloc :

int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top