【问题标题】:allocate new Zero-sized array can have effective value? [duplicate]allocate new 零大小数组能有有效值吗? [复制]
【发布时间】:2020-08-29 15:15:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你正在使用指针算法在相邻的内存上涂鸦
  • 这能回答你的问题吗? C++ new int[0] -- will it allocate memory?
  • @RoQuOTriX 不是;不管有没有分配内存,pv[0] 逻辑上都是越界的。
  • 它真的分配了内存吗?
  • @Larry 为了维护编译器的堆数据结构,它可能会分配内存,但这仅用于结构的内部。

标签: c++


【解决方案1】:

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

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

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

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

不要这样做。

【讨论】:

  • 所以这就是 Richard Prior 如何破解气象卫星来控制那部超人电影中的天气!
  • 所以正在从飞出我们鼻子的龙转移到将太阳运送到另一个星系。为什么我没有收到这份备忘录?
  • @bolov 太阳被运送到一个星系中,龙从鼻子里飞出来是很常见的,每天都在发生
  • “很久很久以前,在一个看不见也听不见的星系中……”
  • 我在这里,仍然被鼻恶魔所困扰。你们比我领先!
猜你喜欢
  • 2011-09-30
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2011-03-03
  • 2011-03-03
相关资源
最近更新 更多