calloc() 和 NULL
Posted
技术标签:
【中文标题】calloc() 和 NULL【英文标题】:calloc() and NULL 【发布时间】:2015-06-30 07:00:51 【问题描述】:我知道 calloc 分配内存并向每个单元格写入零,所以我的问题是: 使用 calloc 或使用 malloc 并在向它们写入 NULL 的单元格上运行有区别吗? calloc 的零是否等价于 NULL?
【问题讨论】:
NULL
可能不会以0
(所有位均为0) 作为表示形式。
这里实现的一些有趣问题 - locklessinc.com/articles/calloc
@BrianAgnew 为什么文章中的 OP 不简单地检查溢出:n > SIZE_MAX/size
@2501 - 我不知道。也许他们只是为了文章的目的而简洁
什么“细胞”?分配的内存malloc
和calloc
可用于存储任何类型的对象。您是否假设分配的空间将用于存储指针值?
【参考方案1】:
不,它们并不总是等效,但在大多数流行的机器上你会没事的。 calloc
将一个全零位模式写入分配的内存,但空指针值在某些机器上可能不是全位零(甚至对于某些机器上的某些类型)。
查看 C 常见问题解答的 Null Pointers 部分以获取大量信息。
【讨论】:
【参考方案2】:NULL 不能保证所有位都设置为 0,即使它总是比较等于整数常量 0。
Calloc 会将所有位设置为 0,就像调用 memset 一样。允许结果值比较不等于 NULL。
因此它们不等价。
【讨论】:
以上是关于calloc() 和 NULL的主要内容,如果未能解决你的问题,请参考以下文章
C ++中的“new”和“malloc”和“calloc”有啥区别? [复制]