我是一个初级的C程序员,我认为情况会是这样的,但如果可能的话,我希望得到一些肯定。
如果它们是一样的,为什么不只取一个参数呢?
发布于 2009-02-01 23:38:54
这是一样的。这是因为在大多数情况下,您希望使用sizeof运算符作为参数之一。如果传递两个参数会让您感到困扰,可以调用只有一个参数的malloc()。
发布于 2009-02-01 23:46:53
人们通常使用分配例程来为一定数量的项目分配空间,因此calloc()允许很好地指定。因此,例如,如果您想要100个整数或20个您自己的结构的空间:
int *pInt = calloc (100, sizeof(int));
tMyStruct *pMyStruct = calloc (20, sizeof(tMyStruct));实际上,这段代码看起来比等效的malloc()调用稍微“好一点”:
int *pInt = malloc (100 * sizeof(int));
tMyStruct *pMyStruct = malloc (20 * sizeof(tMyStruct));尽管对于经验丰富的C程序员来说,这并没有什么真正的区别(当然除了零初始化)。
我不得不说,我从来没有在野外使用过calloc,因为我几乎总是在创建一个零没有意义的struct。我更喜欢手动初始化所有字段,以确保获得所需的值。
发布于 2009-02-02 12:02:24
对于发布的优秀响应,我想在使用calloc(nelem, elsize)和malloc(nelem * elsize)之间再增加一点区别:calloc的高质量实现将确保,如果您的nelem和elsize足够大,当相乘时会导致整数溢出,它将失败,而不是像幼稚的malloc调用那样导致较小的分配。
仅仅这个特性就足以让我更喜欢calloc而不是malloc。Background reading.
https://stackoverflow.com/questions/501839
复制相似问题