C++运行时调用纯虚函数

今天来立马改了测试代码,在父类里加上析构函数声明、实现……果然,析构后对象首地址的内容被改写了
    Obj* pB = new Obj();

    printf("addr(%d) \n", *((int*)pB));

    delete pB;

    printf("addr(%d) \n", *((int*)pB));

至此,可以肯定服务器宕机,就是因为战斗对象被析构,虚指针被改写为指向父类虚表,业务层再拿来用时就跪了。
    (因为用到内存池,所以没出现悬垂指针的问题) 

    剩下的就好查了,delete对象时某业务模块仍持有其指针,没清理。搜搜战斗对象的引用关系,几分钟便找到问题所在。
    

    战斗城池里有个守卫列表,npc进入时会把自己指针放入这个列表,死亡时没去清。

    别人再来打这个城池时,跑战斗流程就调了纯虚函数,宕机。

 

类析构掉的话,虚表会被改写成iobj的虚表,析构过的指针,可以调iobj的虚函数,调其它虚函数则会挂

 

https://www.cnblogs.com/Pony279/archive/2013/06/04/3117955.html

https://www.cnblogs.com/3workman/p/6341393.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值