<分区>
我有一个很不寻常的问题。 我见过将参数传递给 malloc 的两种变体。假设我们有:
int *arr = (int *) malloc(sizex * sizeof(*arr));
有些人说使用 sizeof(*arr)
不好,您应该改用 sizeof(int)
(在本例中)。
您能解释一下有什么区别以及使用什么更好吗?
<分区>
我有一个很不寻常的问题。 我见过将参数传递给 malloc 的两种变体。假设我们有:
int *arr = (int *) malloc(sizex * sizeof(*arr));
有些人说使用 sizeof(*arr)
不好,您应该改用 sizeof(int)
(在本例中)。
您能解释一下有什么区别以及使用什么更好吗?
最佳答案
没有区别。两者分配相同数量的内存 -
int *arr = (int *) malloc(sizex * sizeof(*arr));
// equivalent to
int *arr = (int *) malloc(sizex * sizeof(int));
但是,有一些事情需要注意。
您不应该强制转换 malloc
的结果。它没有用,如果您忘记包含包含其原型(prototype)的 header stdlib.h
,实际上可能会导致问题。请阅读此 - Do I cast the result of malloc?
我更喜欢上面的第一个版本,因为类型信息没有重复。此外,从某种意义上说,它更易于维护,如果您更改类型,则只需更改一次,而在第二种情况下,您需要在两个地方进行更改。
需要注意的是,sizeof
只有当它是一个类型时,它的操作数才需要括号。因此,可以更简洁地写成
int *arr = malloc(sizex * sizeof *arr);
// equivalent to
int *arr = malloc(sizex * sizeof(*arr)); // preferred way
关于c - 使用 malloc() 分配内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277336/