使用malloc()分配内存块

时间:2014-04-24 18:49:36

标签: c arrays pointers malloc

我有一个相当不寻常的问题。 我已经看到了两个向malloc传递参数的变体。假设我们有:

int *arr = (int *) malloc(sizex * sizeof(*arr));

有些人说使用sizeof(*arr)很糟糕,你应该使用sizeof(int)(在这个例子中)。 你能解释一下有什么区别,哪些更好用?

1 个答案:

答案 0 :(得分:1)

没有区别。两者都分配相同数量的内存 -

int *arr = (int *) malloc(sizex * sizeof(*arr));
// equivalent to
int *arr = (int *) malloc(sizex * sizeof(int));

但是,有一些事情需要注意。

  1. 您不应该投射malloc的结果。它没用,如果你忘记包含包含其原型的标题stdlib.h,它实际上可能会导致问题。请阅读此内容 - Do I cast the result of malloc?

  2. 我更喜欢上面的第一个版本,因为没有重复的类型信息。此外,它更易于维护,如果您更改类型,那么您只需要在第二种情况下更改它,您需要在两个位置更改它。

  3. 应该注意的是sizeof仅当它是一个类型时才需要括号作为其操作数。因此,它可以更简洁地写成

    int *arr = malloc(sizex * sizeof *arr); 
    // equivalent to
    int *arr = malloc(sizex * sizeof(*arr));  // preferred way