Android常见Crash原因

1.Java Crash

java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出。Logcat会在“AndroidRuntime”tag下输出Java的调用栈。

2.Native Crash

No.&Name

Reason

Resolution

Comment

1.空指针

试图对空指针进行操作时(如读取空指针指向的内存),处理器就会产生一个异常

在使用指针前加以判断,如果为空,则是不可访问的。

空指针目前是糯米app最多的一种引起crash的原因,但是它也很容易被发现和修复。

2.野指针

指向的是一个无效的地址,该地址如果是不可读不可写的,那么会马上Crash;如果访问的地址为可写,而且通过野指针修改了该处的内存,那么很有可能会等一段时间(其它的代码使用了该处的内存后)才发生Crash。

  1. 在指针变量定义时,一定要初始化,特别是在结构体或类中的成员指针变量。
  2. 在释放了指针指向的内存后,如该指针不再用应置为NULL
  3. 看代码很难查找,通过代码分析工具也很难找出,只有通过专业的内存检测工具,才能发现这类bug。

数组越界

访问无效的地址。如果该地址不可读写,则会马上Crash;如果修改了该处的内存,造成内存破坏,那么有可能会等一段时间才在别处发生Crash。

  1. 所有数组遍历的循环,都要加上越界判断。
  2. 用下标访问数组时,要判断是否越界。
  3. 通过代码分析工具可以发现绝大部分的数组越界问题。

破坏内存的bug,很难查找。

整数除以零

整数除以零默认的处理方式是终止进程

在做整数除法时,要判断被除数是否为0的情况。

改情况在开发环境下很难出现,但庞大的用户量和复杂的用户输入,就很容易导致被除数为0的情况出现。

格式化输出参数错误

与野指针类似,但是只会读取无效地址的内存,而不会造成内存破坏。其结果是要么打印出错乱的数据,要么访问了无读写权限的内存而立即宕机。

在书写输出格式和参数时,要做到参数个数和类型都要与输出格式一致

转载于:https://my.oschina.net/u/3611008/blog/1941446

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值