为了账号安全,请及时绑定邮箱和手机立即绑定

删除等于删除吗?

删除等于删除吗?

C++
临摹微笑 2019-06-17 16:21:59
删除等于删除吗?IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100];如果我自由使用delete ptr;它会导致内存泄漏吗?如果不是,那为什么?这是VS 2005生成的反汇编代码。; delete ptr;0041351D  mov         eax,dword ptr [ptr] 00413520  mov         dword ptr [ebp-0ECh],eax  00413526  mov         ecx,dword ptr [ebp-0ECh] 0041352C  push        ecx   0041352D  call        operator delete (4111DBh) 00413532  add         esp,4 ; delete []ptr;00413535  mov          eax,dword ptr [ptr] 00413538  mov         dword ptr [ebp-0E0h],eax  0041353E  mov         ecx,dword ptr [ebp-0E0h] 00413544  push        ecx   00413545  call        operator delete[] (4111E5h) 0041354A  add         esp,4
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

这是否会导致记忆泄漏,擦拭硬盘,让你怀孕,让恶毒的鼻涕鬼在你的公寓里追赶你,还是让一切正常运转,没有明显的问题,都是未知的。可能是这样的,一个编译器,另一个编译器,一个新的编译器版本,每一个新的编译,月亮的相位,你的心情,或者取决于在最后一个晴朗的下午通过处理器的中微子的数量。也可能不会。

所有这些,以及无限多的其他可能性,都被用在一个术语中:未定义行为:

离它远点。


查看完整回答
反对 回复 2019-06-17
?
慕后森

TA贡献1802条经验 获得超5个赞

它通常不会泄漏,因为在POD的情况下,析构函数是微不足道的,并且没有必要调用它们。delete释放数组占用的内存。内存去分配只需要一个指针值,因此它将被返回到堆中。该数组包含一个连续的内存块,因此,取消分配可能是成功的,就好像它是一个单个元素的去分配一样。

但不要依赖这一点,因为这是不明确的行为。也许它正常工作,也许发生了一些可怕的事情,在这个编译器上工作,在另一个编译器上不起作用,许多人感谢你植入了一个错误。

看见这个答案关于细节。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 557 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信