野指针

野指针是让人非常淡疼的一件事,遇到这种问题,人品好的时候程序正常运行,人品差的时候隔三差五的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填充了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容