首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >calloc(4,6)和calloc(6,4)是否相同?

calloc(4,6)和calloc(6,4)是否相同?
EN

Stack Overflow用户
提问于 2009-02-01 23:36:58
回答 7查看 7.8K关注 0票数 38

我是一个初级的C程序员,我认为情况会是这样的,但如果可能的话,我希望得到一些肯定。

如果它们是一样的,为什么不只取一个参数呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-01 23:38:54

这是一样的。这是因为在大多数情况下,您希望使用sizeof运算符作为参数之一。如果传递两个参数会让您感到困扰,可以调用只有一个参数的malloc()

票数 2
EN

Stack Overflow用户

发布于 2009-02-01 23:46:53

人们通常使用分配例程来为一定数量的项目分配空间,因此calloc()允许很好地指定。因此,例如,如果您想要100个整数或20个您自己的结构的空间:

代码语言:javascript
复制
int *pInt = calloc (100, sizeof(int));
tMyStruct *pMyStruct = calloc (20, sizeof(tMyStruct));

实际上,这段代码看起来比等效的malloc()调用稍微“好一点”:

代码语言:javascript
复制
int *pInt = malloc (100 * sizeof(int));
tMyStruct *pMyStruct = malloc (20 * sizeof(tMyStruct));

尽管对于经验丰富的C程序员来说,这并没有什么真正的区别(当然除了零初始化)。

我不得不说,我从来没有在野外使用过calloc,因为我几乎总是在创建一个零没有意义的struct。我更喜欢手动初始化所有字段,以确保获得所需的值。

票数 24
EN

Stack Overflow用户

发布于 2009-02-02 12:02:24

对于发布的优秀响应,我想在使用calloc(nelem, elsize)malloc(nelem * elsize)之间再增加一点区别:calloc的高质量实现将确保,如果您的nelemelsize足够大,当相乘时会导致整数溢出,它将失败,而不是像幼稚的malloc调用那样导致较小的分配。

仅仅这个特性就足以让我更喜欢calloc而不是mallocBackground reading.

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/501839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档