零大小的分配请求

时间:2014-07-19 18:18:14

标签: c++ allocation

我一直在阅读有关分配功能的内容(N3797的第3.7.4.1节),我发现了以下内容:

  

即使请求的空间大小为零,请求也可能失败。

目前还不清楚,因为我requested零大小并且工作正常。你能解释一下这个规则吗?

3 个答案:

答案 0 :(得分:2)

重点是即使请求大小为零,也允许分配器的实现失败。它没有说它必须失败,只是因为出于某些原因,在分配器实现的情况下,它会被允许失败。一个典型的原因是,管理零长度分配所需的开销对于当前的内存来说太大了(比如因为已经执行了其他分配)。

答案 1 :(得分:0)

从标准5.3.4 / 7:

  

当direct-new-declarator中的表达式的值为零时,   调用分配函数来分配没有的数组   元件。

和3.7.3.1/2

  

[32。目的是通过调用实现operator new()   malloc()或calloc(),所以规则基本相同。 C ++   与C不同,要求零请求返回非null   指针。]

同样要添加运算符new并不能保证将内存初始化为任何东西,并且在没有new-initializer的情况下分配unsigned int的new-expression会使对象具有不确定的值。

答案 2 :(得分:0)

由于历史原因,当请求零字节时,malloc可能返回非空指针。 MAY。最终需要零长度数组的情况应该只是将指针设置为nullptr并将其用作和指示不释放/删除它。