-
-
[讨论]delete的问题
-
发表于:
2007-10-19 13:03
4521
-
如下源码:
void main()
{
_asm int 3
int *x=new int[5];
*x=0x1234;
*(x+1)=0x5678;
*(x+2)=0xabcd;
delete x;
}
汇编代码:
00401000 int 3
00401001 push 14h
00401003 call 0040103B ; int *x=new int[5]
00401008 push eax
00401009 mov dword ptr [eax],1234h
0040100F mov dword ptr [eax+4],5678h
00401016 mov dword ptr [eax+8],0ABCDh
0040101D call 00401030 ; delete x
00401022 add esp,8
00401025 ret
按理说, delete x只会释放掉指针x所指向的整型数据空间(共4个字节)
但调试时,查看内存数据可以发现:执行delete x一句后,指针x其后的一片连续区域数据空间,全部被释放了,超过了20个字节,这里 delete 有什么名堂?
进一步调试可以发现:delete x 和 delete [] x的反汇编代码代码居然是一样的,不知何故?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课