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
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
相关文章推荐
- Arcgis Android 常见问题
- android之AsyncTask
- android入门级之资源的使用--图片资源--控件ImageView
- 安卓软件全家桶分析,哪些软件是一伙的
- android中常用的开源项目
- Android Studio 调试过程中快捷查看断点处变量值(Ctrl+Shift+I无效)?
- Android 中TextView内容过长加省略号,点击显示全部内容
- 关于android 图标标准 ,效果图切图标准, 单位标准换算
- android binder机制学习(准备工作)
- 【安卓】Android6.0的String源码被修改
- Activity的生命周期(2)
- 【Android学习笔记】Activity的小弟--Fragment以及异步加载数据的Loader
- Android+Dialog;
- 自定义Viewpager
- 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
- android入门级之资源的使用--声音资源--控件MediaPlayer
- 33.Android 自动适配字体大小的AutoAdjustSizeEditText
- Android开发实践(一)
- Android APK反编译详解(附图)
- Socket通信原理