一桩由android崩溃引发的血案

游戏在android下切换场景时崩了,查看崩溃日志发现是在Unit对象析构时发生了SEGV_MAPERR,仔细研究了一番,发现是在访问一个指针成员时出错,这个指针指向的内存已经被释放了。

但是为什么只在android下崩,win和ios都没出现呢,然后调试win下的代码,发现在win下根本没走到这一行代码来,在前面有一行检测另一个vector成员size是否大于0,大于0才会继续往下走,在android下是大于0的。

继续研究发现这个vector成员(非指针)已经先自动析构了,只是在win下和anroid下STL实现的析构行为不一样,android下不会清0,谜题终于解开。

通过这次事件才注意到c++的非指针成员自动析构是有顺序的,后声明的先析构,那么后析构的成员就不应该在析构时去访问已经先于自己析构的其他成员。设计时要尽量避免成员之间的依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值