在这种情况下,数组会取消分配吗?

Stackoverflow的侄子

重新定位数组指针是否会影响Delete运算符的工作?

情况1)

int main(){
   int *a = new int[5];
   a++; a--;
   delete[] a;
   return 0;
 }

情况(2)

int main(){
   int *a = new int[5];
   a++;
   delete[] a;
   return 0;
 }

情况(3)

int main(){
   int *a = new int[5];
   a++;
   delete[] a;
   a--;
   delete[] a;
   return 0;
 }
涅pel

编辑:[情况2和3]它是未定义的。操作员可能会根据其地址搜索要取消分配的对象,但将找不到它。不要在家尝试;)

在这里阅读更多

原始问题的原始答案---对于情况1 ---:您的代码并未真正重定位数组;最终传递给delete []运算符的地址与(由new []运算符返回)分配的地址相同。总的来说,delete []的功能在此是安全的且已定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift在这种情况下会复制突变吗?

为什么在这种情况下必须取消引用“ this”?(分配操作员)

在这种情况下,java堆会跳到磁盘上吗?

在这种情况下,Spring会创建父bean吗?

在这种情况下,gargabe收集器会重新收集该对象吗?

在这种情况下,垃圾收集器会破坏我的对象吗?

在这种情况下使用SecureString会提高安全性吗?

在这种情况下 git rebase 会返回相同的哈希吗?

Python:在这种情况下,为什么不能为数组分配新值?

Python-在这种情况下如何解释将数据分配给数组

“在这种情况下”使用数组会产生什么不良后果?

servlet的getMethod在这种情况下会执行吗?

为什么在这种情况下 sprintf 会崩溃?

在这种情况下可以实现hashCode()方法吗?

在这种情况下,我需要“默认”语句吗?

在这种情况下可以重写ToString()方法吗

在这种情况下使用 SQL PIVOT 吗?

在这种情况下应该使用cron工作吗?

我可以在这种情况下使用枚举吗?

Go:在这种情况下需要频道吗?

在这种情况下真的需要 FlexibleContexts 吗?

在这种情况下eval()是邪恶的吗?

在这种情况下我必须删除内存吗?

在这种情况下应避免附着吗?

在这种情况下可以更改图标吗?

在这种情况下可以实现Rest Api吗?

在这种情况下我应该检查指针吗?

在这种情况下如何使用 Ruby 数组?

在这种情况下如何循环数组?