質問
intがmyArray [n]に相当するものを見つけようとしていますが、nが入力なしで何であるかがわからない場合を除きます。
次のコードは動作するはずですか? (mallocの代わりにkmallocを使用する必要があります)。
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
gdbを使用してデバッグすると、値pages [0]は0に見えません-これは予想されますか?
解決
はい。メモリは初期化されていません。メモリの塊へのポインタを取得するだけです。
memset
初期化するには:
memset(pages, 0, npages * sizeof(int));
また、間違っていない限り kmalloc
は 2番目のパラメーター、割り当てるメモリのタイプ。
他のヒント
malloc
は、配列に割り当てたヒープ上の場所へのポインタを返します。そのメモリは初期化されません。 malloc
の代わりに calloc
を使用してメモリを初期化(ゼロに設定)するか、メモリを割り当てた後に memset
を使用できます。メモリをゼロに設定します。
kmalloc
を使用しているため、おそらく memset
を使用する必要があります。カーネルで初期化されたメモリを割り当てるための cmalloc
があるとは思わない。
代わりに、カーネル関数 kzalloc を使用することもできます:
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);
所属していません StackOverflow