c++ - allocate new 零大小数组能有有效值吗?

标签 c++

这个问题在这里已经有了答案:





C++ new int[0] -- will it allocate memory?

(6 个回答)


1年前关闭。




//new T[0] 分配一个大小为零的数组可以有值吗?

auto pv=new int[0];
cout<<pv<<endl; //0x... ?
*pv=123;
cout<<*pv<<endl; //123 ?
delete[] pv;

为什么?
如果是这样,新 T[0] 和新 T[1] 有什么区别

为什么我可以设置 0 大小数组的值...?

最佳答案

创建 new int[0] 是合法的(虽然乍一看它可能看起来没有用!)。

但是,您对它的使用就像任何其他缓冲区溢出一样:your program has undefined behaviour .

C++ 不会为您检查数组边界。那是你的工作。

越过它们似乎可行;它可能导致崩溃;它可以瞬间将太阳传送到银河系的另一部分。

只是不要这样做。

关于c++ - allocate new 零大小数组能有有效值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61774456/

相关文章:

c++ - OpenCV-OpenGL 互操作性

c++ - 我可以做x = y = z。为什么 C++ 中不允许 x < y < z?

c++ - 这个宏有什么作用?

c++ - 如何使用 boost::call_once 在 Linux 上用 C++ 设计单例类?

c++ - 为什么我的覆盖方法没有被调用?

c++ - 在 C/C++ 中解析 100,000 个 YYYYMMDD.HHMMSS 字符串时 mktime 缓慢

c++ - 这个失败的测试是否将零添加到空指针未定义的行为、编译器错误或其他什么?

c++ - 抑制代码内部的 "unused parameter"警告

c++ - 强制 Visual Studio 进入 STL 类/函数

具有相同数据结构的 C++ 类