【问题标题】:What will happen if we delete an array after increment the pointer? [duplicate]如果我们在增加指针后删除数组会发生什么? [复制]
【发布时间】:2017-02-21 09:04:47
【问题描述】:
int main(){

int *p=new int[5];

//case 1: delete p;
//case 2: p++;delete[] p;


return 0;
}

如果我分别使用 case 1 和 case 2 会发生什么?

【问题讨论】:

  • 这可能很大程度上取决于您在编译期间使用的标志。
  • 这是未定义的行为。使用delete[]new[]deletenew

标签: c++ arrays dynamic


【解决方案1】:

会发生什么

案例 1:未定义的行为。

p 不是由对new 的调用返回的(而是由new[]),所以delete p; 是UB。


案例 2:未定义的行为。

p+1 没有通过对new[] 的调用返回,所以p++;delete[] p; 是UB。

【讨论】:

    【解决方案2】:

    您可以释放未分配的内存。 您必须在使用 new 返回的相同指针值上调用 delete

    【讨论】:

    • 没有。它是未定义的。它可以释放内存,也可以做其他事情。
    • 我的第二个陈述仍然是正确的。只需将“遗嘱”视为“可能”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2012-01-08
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多