首页 >后端开发 >C++ >当您在 C 中使用 new int[0] 分配零大小的数组时会发生什么?

当您在 C 中使用 new int[0] 分配零大小的数组时会发生什么?

Patricia Arquette
Patricia Arquette原创
2024-12-24 20:12:22731浏览

What Happens When You Allocate a Zero-Sized Array with `new int[0]` in C  ?

使用 new int[0] 进行 C 内存分配

使用 new 运算符分配内存时,会出现一个常见问题:当请求的数组大小为零?

令人惊讶的是,代码snippet:

cout << new int[0] << endl;

输出一个地址,表示内存已分配。 C 标准解决了这种行为:

空数组分配和使用

如 C 标准 5.3.4/7 中所述,可以分配零大小的数组但根据 3.7.3.1/2,它们的用法未定义。

处理零大小数组

即使成功分配内存,也不能保证解引用是安全的。不保证它会指向有效的内存。

结论

虽然允许使用 new int[0] 分配空数组,但访问或修改分配的内存具有未定义的行为,应该避免。任何分配的此类内存都必须使用delete删除,以确保正确的资源释放。

重要的是要注意运算符new()的标准要求即使对于零大小的请求也返回非空指针,这与malloc() 的行为。但实际分配仍有可能失败。

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

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