问题描述
IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100];
如果我自由使用
delete ptr;
会导致内存泄漏,如果不是,为什么?
will it lead to memory leak, if not then why ?
这是VS2005生成的反汇编代码
This is disassembly code generated by VS2005
**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
推荐答案
这是否会导致内存泄漏,擦除硬盘,让你怀孕,使讨厌的鼻恶魔追逐你的公寓,或让一切工作正常,没有明显的问题,是未定义的。它可能是这种方式与一个编译器,并改变与另一个,改变与新的编译器版本,与每个新的编译,与月相,你的心情,或根据通过处理器的数量或中微子在最后一个阳光下午。或者它可能不。
Whether this leads to a memory leak, wipes your hard disk, gets you pregnant, makes nasty Nasal Demons chasing you around your apartment, or lets everything work fine with no apparent problems, is undefined. It might be this way with one compiler, and change with another, change with a new compiler version, with each new compilation, with the moon phases, your mood, or depending on the number or neutrinos that passed through the processor on the last sunny afternoon. Or it might not.
所有这一切,以及无限数量的其他可能性放入一个术语:未定义的行为:
All that, and an infinite number of other possibilities are put into one term: Undefined behavior:
只是远离它。
这篇关于是delete []等于delete?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!