美文网首页
隐蔽的越界逻辑汇总(持续更新中...)

隐蔽的越界逻辑汇总(持续更新中...)

作者: 双鱼子曰1987 | 来源:发表于2020-12-02 10:41 被阅读0次

一、概述

数组越界是移动端、服务器最常见的越界之一,虽然有些语言加了保护,但还是很多会导致Crash。例如,OC、C等。

通过学习一些越界的坑,无疑可以提高自己代码逻辑严谨性,故汇总于此。

二、数组越界汇总

2.1、执行 --i 代码时

  • 因为 i 是无符号整数,所以 当i=0,执行--i,会出现无穷大的数,导致越界。
NSArray *array = @[@1, @2, @3, @4];
for (NSUInteger i = array.count - 1; i >= 0; --i) {
    NSLog(@"%@", array[i]);
}
  • 如果 i 是有符号整数,则没有问题。
NSArray *array = @[@1, @2, @3, @4];
for (NSInteger i = array.count - 1; i >= 0; --i) {
    NSLog(@"%@", array[i]);
}
  • 以下同样会导致Crash,这是因为 i 会自动类型转换为无符号整数。
NSArray *array = @[@1, @2, @3, @4];
for (NSInteger i = array.count - 1; i >= (NSUInteger)0; --i) {
    NSLog(@"%@", array[i]);
}
  • 汇总如下
(lldb) p -1 > 0
(bool) $0 = false
(lldb) p -1 > (NSUInteger)0
(bool) $1 = true
(lldb) p (NSUInteger)-1 > (NSUInteger)0
(bool) $2 = true

实际开发中,上面的 0array.count-1 往往会是变量名,具体值取决于外部赋值。这类的问题将会更加隐蔽,结果发到线上就是Crash工单,因此写代码中需要多多考虑。

2.2、可变数组多线程中,读取、写入同时操作

NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:@[]];
for (int i=0; i< 666; i++) {
    [mutableArray addObject:@(1)];
}

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSInteger totalCount = mutableArray.count;
    for (NSInteger i = 0; i < totalCount; i++) {
        NSLog(@"%@", mutableArray[i]);
    }
});
    
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    for (NSInteger i = 0; i < 88; i++) {
        [mutableArray removeObjectAtIndex:i];
    }
});

这种类型属于多线程操作中没有做数据同步机制,实际开发中,新手也是常常犯的错误。对于复杂的多线程环境中,更加的隐蔽不易发现,很多的老手也会出现这样的问题。

相关文章

  • 隐蔽的越界逻辑汇总(持续更新中...)

    一、概述 数组越界是移动端、服务器最常见的越界之一,虽然有些语言加了保护,但还是很多会导致Crash。例如,OC、...

  • 2020-07-28

    孩子培养网络资源汇总 暑假幼升小课程选择,数学,语文,拼音,艺术类,逻辑类 持续尝试,更新....... 首先明确...

  • iOS代码检查清单

    检查代码是否规范,持续更新 数组越界 NSRange越界 网络数据类型转换错误 系统方法JSON反序列化参数为空 ...

  • PPT说 | 心理:如何用“正念”方法应对焦虑

    历史汇总 | 免费PPT模板最全目录,每日持续更新!请收藏转发(20200505) 解说难度:★★☆☆☆ 生活中,...

  • PPT说 | 沟通:帮你成功谈判的7个技巧

    历史汇总 | 免费PPT模板最全目录,每日持续更新!请收藏转发(20200505) 解说难度:★★☆☆☆ 日常中,...

  • 精句汇总(持续更新中)

    1、其实这世界上绝大部分的人只是无声无息的来,无声无息的去。 2、所有身心健康的人,都或多或少设想期待过自己所爱的...

  • charlse 问题汇总(持续更新中)

    charlse的安装就不赘述了,简书上就有几篇不错的文章,这里只记录一些自己在使用中碰到的问题。 问题一、 cha...

  • 那些年收藏过的 Android文章(持续更新中...)

    那些年收藏过的 Android文章(持续更新中...) Android开发常用框架汇总 android 仿美团左右...

  • 在荔枝FM上读诗

    在荔枝FM上读诗,汇总发出的声音(持续更新中......) (英文阅读部分算是练习吧) 读诗01:《青果》(作者:...

  • 类orAPI

    Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...) 前言 “条条大路通罗马。” 工...

网友评论

      本文标题:隐蔽的越界逻辑汇总(持续更新中...)

      本文链接:https://www.haomeiwen.com/subject/pceywktx.html