C new[0] 的内存分配
在 C 中,new[] 运算符允许分配动态内存。但是,当运算符调用中指定的数组大小为零时会发生什么?一个简单的测试程序输出表明内存似乎已分配。
标准定义
根据 C 标准,在 5.3.4/7 中:
“当直接new声明符中表达式的值为0时,调用分配函数来分配一个没有元素。”
未定义行为
但是,需要注意的是,3.7.3.1/2 声明:
“取消引用 a 的效果作为零大小请求返回的指针未定义。”
这意味着虽然技术上可行使用 new[] 分配一个空数组,访问或修改它指向的内存具有未定义的行为。
分配失败
此外,标准提到即使对于零大小请求,分配仍然可以失败。
含义
实际上,这意味着:
脚注
该标准包含一个脚注,表明其目的是允许 new[]使用 malloc() 或 calloc() 等函数实现,它们还针对零大小请求返回非空指针。
以上是当您在 C 中使用大小为零的 new[]` 时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!