C 的内存分配:你能分配一个空数组吗?
在 C 中,数组的内存分配可以使用动态完成新的运营商。但是,当您分配大小为零的数组时会发生什么?
cout << new int[0] << endl;
这会为空块分配内存吗?让我们探讨一下标准的立场。
标准解释
根据 C 标准(5.3.4/7),“当表达式的值直接- new-declarator为零,调用分配函数来分配一个没有的数组元素。”
解引用问题
但是,标准 (3.7.3.1/2) 明确指出“解引用作为零请求返回的指针的效果大小未定义。”这意味着虽然技术上可以分配空数组,但尝试访问其元素(例如,通过取消引用返回的指针)是未定义的行为。
附加说明
尽管标准允许分配空数组,但它强调对零大小内存的请求仍然可能失败。这是因为动态内存分配可能依赖于外部系统库(例如 malloc()),这些库可能有自己的此类请求处理方式。
影响和最佳实践
在实践中,避免分配空数组通常被认为是良好的做法。该行为是未定义的,它可能会导致跨不同平台和环境的意外结果。如果您需要处理需要空容器的场景,请考虑使用替代方法,例如使用大小为零的 std::vector 或 std::array。
以上是C 可以分配空数组吗?如果可以,使用安全吗?的详细内容。更多信息请关注PHP中文网其他相关文章!