您的位置:首页 > 移动开发 > Android开发

android中if判断引起的crash

2015-11-05 19:15 495 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: