野指针

作者: 子键_北京不眠夜 | 来源:发表于2016-06-24 13:00 被阅读53次

    野指针是让人非常淡疼的一件事,遇到这种问题,人品好的时候程序正常运行,人品差的时候隔三差五的Crash,还不好找,也就是说,它是随机的。

    所以在调试阶段,我们需要一种方法,让这种随机变成不随机。Xcode正好为我们提供了这样一种方法。在Edit scheme -> Run/Test -> Diagnostics中选中Enable Malloc Scribble,我们开启Malloc Scribble(内存涂鸦)。

    Malloc Scribble的基本思想是,在对象被释放后,在对应内存块中填上不可访问的无意义的数据(0x55),那么我们再使用这个对象时,程序将直接Crash。

    我们做个简单的测试,可以看到编译器会给个警告:Assigning retained object to unsafe_unretained variable; object will be released after assignment,也就是说在赋值后�array对象就会被释放。而同时因为不会被置为nil(__unsafe_unretained),所以就成了一个野指针。

    在不开启Malloc Scribble时,能正常打印出日志;而在开启Malloc Scribble时,程序会直接崩溃

    EXC_BAD_ACCESS内存访问错误。我们用memory read命令来查看一下array对象的内存,如图4所示。

    可以看到array的内存块都已用0x55填充了

    相关文章

      网友评论

          本文标题:野指针

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