質問

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top