【问题标题】:calloc() and NULLcalloc() 和 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 可用于存储任何类型的对象。您是否假设分配的空间将用于存储指针值?

标签: c null dynamic-memory-allocation calloc


【解决方案1】:

不,它们并不总是等效,但在大多数流行的机器上你会没事的。 calloc 将一个全零位模式写入分配的内存,但空指针值在某些机器上可能不是全位零(甚至对于某些机器上的某些类型)。

查看 C 常见问题解答的 Null Pointers 部分以获取大量信息。

【讨论】:

    【解决方案2】:

    NULL 不能保证所有位都设置为 0,即使它总是比较等于整数常量 0。

    Calloc 会将所有位设置为 0,就像调用 memset 一样。允许结果值比较不等于 NULL。

    因此它们不等价。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2012-03-02
      • 2010-10-04
      • 1970-01-01
      • 2021-11-12
      • 2016-06-29
      • 2013-11-17
      • 2020-03-22
      • 2010-12-05
      相关资源
      最近更新 更多