使用 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中文网其他相关文章!