C++ 零大小的分配请求

C++ 零大小的分配请求,c++,allocation,C++,Allocation,我一直在阅读有关分配函数的内容(N3797第3.7.4.1节),我遇到了以下问题: 即使请求的空间大小为零,请求也可能失败 这是不清楚的,因为我知道零尺寸,它工作良好。你能解释一下这条规则的要点吗?来自标准5.3.4/7: 当直接新声明符中表达式的值为零时, 调用分配函数来分配一个没有 元素 从3.7.3.1/2开始 [32.目的是通过调用 MalCube()或CalOrth.(),所以规则基本相同。C++ 与C的不同之处在于要求零请求返回非null 指针。] 另外,添加运算符new并不保证将内

我一直在阅读有关分配函数的内容(N3797第3.7.4.1节),我遇到了以下问题:

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


这是不清楚的,因为我知道零尺寸,它工作良好。你能解释一下这条规则的要点吗?

来自标准5.3.4/7:

当直接新声明符中表达式的值为零时, 调用分配函数来分配一个没有 元素

从3.7.3.1/2开始

[32.目的是通过调用 MalCube()或CalOrth.(),所以规则基本相同。C++ 与C的不同之处在于要求零请求返回非null 指针。]


另外,添加运算符new并不保证将内存初始化为任何值,分配无符号int而不使用新初始值设定项的新表达式会给对象留下一个不确定的值。

关键是允许分配器的实现失败,即使请求大小为零。它并没有说它必须失败,只是说它允许失败,如果出于某种原因,考虑到分配器的实现,这会很方便。一个典型的原因是,目前管理零长度分配所需的开销对于内存来说太大(比如说,因为已经执行了其他分配)

由于历史原因,当请求零字节时,malloc可能返回非空指针。也许最后需要零长度数组的情况下,只需将指针设置为NulLPTR,并使用该AS和指示来不释放/删除它。

< P> > C++特性之一。
当你做了一个错误的过程,它是不可预测的

只是你永远不会得到一个大小的分配zero@DieterL妈的,但我能。并且该指针没有空地址。@DmitryFucintv显示分配了一些字节(请求无)@DieterLücking(facepalm),那么零大小请求分配了多少字节?1或0?如果请求零字节,则不允许使用返回地址的任何字节。然而,实现可以做任何他们需要的事情,以便“跟踪事情”,这意味着他们实际上可以分配一些字节(即使你不允许使用它们)。他们这样做是为了跟踪堆结构。您能解释一下,用零大小请求返回的地址是什么意思吗?也就是说,零大小分配取决于实现。