首页 >后端开发 >C++ >当您在 C 中使用大小为零的 new[]` 时会发生什么?

当您在 C 中使用大小为零的 new[]` 时会发生什么?

Barbara Streisand
Barbara Streisand原创
2024-12-16 16:26:10555浏览

What Happens When You Use `new[]` with a Size of Zero in C  ?

C new[0] 的内存分配

在 C 中,new[] 运算符允许分配动态内存。但是,当运算符调用中指定的数组大小为零时会发生什么?一个简单的测试程序输出表明内存似乎已分配。

标准定义

根据 C 标准,在 5.3.4/7 中:

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

未定义行为

但是,需要注意的是,3.7.3.1/2 声明:

“取消引用 a 的效果作为零大小请求返回的指针未定义。”

这意味着虽然技术上可行使用 new[] 分配一个空数组,访问或修改它指向的内存具有未定义的行为。

分配失败

此外,标准提到即使对于零大小请求,分配仍然可以失败。

含义

实际上,这意味着:

  • 您可以使用 new[] 分配空数组。
  • 您不应该取消引用返回的指针。
  • 您应该删除分配的内存,即使它的大小为零。

脚注

该标准包含一个脚注,表明其目的是允许 new[]使用 malloc() 或 calloc() 等函数实现,它们还针对零大小请求返回非空指针。

以上是当您在 C 中使用大小为零的 new[]` 时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn