android中if判断引起的crash

在Android debug过程中有如下的crash.

11-05 03:11:24.271  1262  1262 F DEBUG   :     #00 pc 00022234  /system/lib/libstagefright_omx.so (android::OMXNodeInstance::onEvent(OMX_EVENTTYPE, unsigned int, unsigned int)+1011)
11-05 03:11:24.271  1262  1262 F DEBUG   :     #01 pc 00018145  /system/lib/libstagefright_omx.so (android::OMX::OnEvent(unsigned int, OMX_EVENTTYPE, unsigned int, unsigned int, void*)+56)


通过addr2line -e libstagefright_omx.so 00022234看到是因为,if(mName)的判断造成的。

看到函数源码以后,一时有点丈二摸不着头脑了,函数内部就一个if判断,何来的crash?

网上搜了下,正好有碰到相似的问题,原因如下:

这个函数如此调用:this->OnEvent(xxxx); 当this指针为空时,并不是在函数调用这行CRASH,而是在成员函数内部。

原理《C++对象模型》书中有讲解:C++中类的成员函数和成员变量不太一样,成员变量定义在对象内部,跟对象一个级别,与this指针有关;而成员函数则定义在类内部,跟类一个级别,与this指针无关。换个角度理解这句话,即使对象指针为空,通过空对象指针访问成员函数也是可以,只有当成员函数内部需要访问成员变量时才会CRASH,因为成员变量定义在对象内部。这个道理我懂,但怎么也跟空指针联系起来!


参考:http://blog.csdn.net/ryfdizuo/article/details/9011425

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值