我一直在阅读有关分配功能的内容(N3797的第3.7.4.1节),我发现了以下内容:
即使请求的空间大小为零,请求也可能失败。
目前还不清楚,因为我requested零大小并且工作正常。你能解释一下这个规则吗?
答案 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并将其用作和指示不释放/删除它。