在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