代码之家  ›  专栏  ›  技术社区  ›  stringo0

C-动态初始化数组

  •  0
  • stringo0  · 技术社区  · 15 年前

    我试图找到i n t myarray[n]的等价物,但是我不知道没有输入n是什么。

    以下代码是否有效?(我需要使用kmalloc而不是malloc)。

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

    使用gdb进行调试时,值页[0]似乎不是0-这是预期值吗?

    3 回复  |  直到 12 年前
        1
  •  3
  •   GManNickG    15 年前

    对。内存没有初始化,你只需要得到一个指向内存块的指针。

    你需要 memset 要初始化它:

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

    另外,除非我弄错了 kmalloc 采取了 second parameter ,要分配的内存类型。

        2
  •  5
  •   James McNellis    15 年前

    malloc 返回指向堆中为数组分配的某个位置的指针。它不能初始化内存。你可以用 calloc 而不是 马洛克 要初始化内存(设置为零),或者可以使用 memset 在您分配内存并将内存设置为零之后。

    因为你在使用 kmalloc ,您可能需要使用 清零 我不相信 cmalloc 用于在内核中分配初始化的内存。

        3
  •  0
  •   ʀᴏʙ    12 年前

    或者,您可以使用内核函数 kzalloc :

    int * pages;
    pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);