VS2010-Debug版本
 9: int *obj = new int(6);
00F714CE push //压栈
00F714D0 call operator new (0F711EAh) //调用new函数返回分配的地址addr --- 0F711EAh是指令 jmp operator new 的地址
00F714D5 add esp, //恢复栈
00F714D8 mov dword ptr [ebp-0F8h],eax //把返回的地址addr赋给起始地址为ebp-0F8h的内存空间
00F714DE cmp dword ptr [ebp-0F8h], //判断分配是否成功
00F714E5 je main+51h (0F71501h) //如果不成功跳往0x0F71501h
00F714E7 mov eax,dword ptr [ebp-0F8h] //起始地址为ebp-0F8h 的内存空间(addr)赋值给eax
00F714ED mov dword ptr [eax], //把以起始地址为eax的内存空间(addr)置成6
00F714F3 mov ecx,dword ptr [ebp-0F8h] //起始地址为ebp-0F8h 的内存空间(addr)赋值给ecx
00F714F9 mov dword ptr [ebp-100h],ecx //ecx的值(addr)赋给起始地址为ebp-100h的内存空间
00F714FF jmp main+5Bh (0F7150Bh) //无条件跳转到0x0F7150B
00F71501 mov dword ptr [ebp-100h], //起始地址为ebp-100h的内存空间置为0---分配失败的情况
00F7150B mov edx,dword ptr [ebp-100h] //起始地址为ebp-100h的内存空间(addr)赋值给edx
00F71511 mov dword ptr [obj],edx //把edx的内容(addr)赋值给obj为起始地址的内存空间a
10: delete obj;
00F71514 mov eax,dword ptr [obj] //把obj为起始地址的内存空间送往eax
00F71517 mov dword ptr [ebp-0ECh],eax //eax送往以ebp-0ECh为起始地址的内存空间
00F7151D mov ecx,dword ptr [ebp-0ECh] //以ebp-0ECh为起始地址的内存空间送往ecx
00F71523 push ecx //ecx压栈
00F71524 call operator delete (0F710A0h)
00F71529 add esp,
11:int *obj2 = new int(7);
与分配obj相同
 此时输出*obj,会得到“7”。
why? obj本来是指向分配的地址addr_obj, 删除操作就是删除掉addr_obj中的内容,释放addr_obj内存,但是obj本身还是指向它的
当我们给obj2分配空间时,new函数会返回第一个可用的地址,也就是刚才释放的addr_obj,此时obj仍然指向该地址,所以得到上述结果。
这样做虽然偶尔会正确,但是后患无穷!!!
 
 
addr的经过的地方
eax -> ptr [ebp-0F8h] -> ecx ->  ptr [ebp-100h] -> edx -> ptr[obj]
 
new函数所要做的
1. 调用对象的构造函数,分配空间,返回地址addr
2. 把返回的地址addr赋值给指针对象

最新文章

  1. 【mysql】关于循环插入数据 存储设计
  2. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】
  3. [Logstash-input-redis] 使用详解
  4. Python 第二模块学习总结
  5. iis不支持下载apk的解决办法
  6. android创建自定义控件
  7. 应用内存优化之OnLowMemory&OnTrimMemory
  8. 对于接收到的GPS信息详解
  9. Bluetooth 4.0之Android 解说
  10. 1分钟快速生成用于网页内容提取的xslt
  11. 存储过程与SQL的结合使用
  12. [置顶] ProcessOn:划时代性的在线作图工具
  13. Knuth-Morris-Pratt Algorithm
  14. windows中操作文件和目录的函数
  15. Xamarin.Android 怎么定义一个按钮和返回键功能一样回到上一个界面
  16. Spark技术内幕: Shuffle详解(一)
  17. Resharper 详细教程
  18. 深入理解java虚拟机(二)-----垃圾回收
  19. Android四种Activity的加载模式
  20. ViewPager 如何得到当前的Fragment (使用FragmentPagerAdapter)

热门文章

  1. ubuntu 部署Django
  2. 剑指offer第七章&第八章
  3. 【oracle】Oracle中as关键字
  4. POJ3045 Cow Acrobats
  5. Tencent Server Web 安装试用
  6. lapis 路由
  7. Hangfire 任务调度
  8. 如何批处理多个MySQL文件
  9. Java API 操作Redis
  10. opencv读取中文路径报错的问题