野指针

作者: 子键_北京不眠夜 | 来源:发表于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填充了

相关文章

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 空指针和野指针

    1、什么是空指针,什么是野指针 2、野指针的危害

  • iOS监控-野指针定位

    iOS监控-野指针定位 iOS监控-野指针定位

  • 野指针空指针万能指针

    野指针空指针万能指针

  • 野指针危害真的很大吗?

    想要知道野指针危害到底有多大,首先需要知道野指针是怎么形成的,以及形成野指针会带来什么本质上的缺点。 当然,野指针...

  • iOS-空指针,野指针,僵尸对象

    浅谈一下空指针,野指针,僵尸对象。 空指针:没有存储任何内存地址的指针,空指针的值是0; 野指针:指针指向的对象已...

  • 野指针

    概念:野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NU...

  • 野指针

    野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免...

  • 野指针

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

  • 野指针

    指针是个很强大的工具,可是正因为它太强大,所以要操作它不是件易事。操作不当造成的野指针,甚至会引起系统死机等比较严...

网友评论

      本文标题:野指针

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