黑马程序员技术交流社区

标题: 【积累】”野指针“ [打印本页]

作者: 弹琴骚年    时间: 2014-10-18 21:50
标题: 【积累】”野指针“
最近敲代码老是越到EXC_BAD_ACCESS这个错误。老师说过,看到这个错误想都不用想就是”野指针“错误了。对于这种错误,本人头都大了,不知道你们什么感受。。
总之,为了有效防止这种”野指针“错误,我还是觉得要理解这个错误是怎么造成的,这样才能更有效的防止”野指针“错误的发生,不是么?:lol
”野指针“:不是NULL指针,是指向”垃圾“的指针。
”野指针“的成因主要有以下几种:

(1)指针变量没有初始化,就拿来使用。
(好吧,这个错误我也经常犯。。:P)
建议:要把指针设置为NULL,要么就让指针指向合法的内存。

(2)指针p指向的内存空间被释放了,指针变量p没有置为NULL。
(这种做法很可能让人误认为指针变量p还是一个合法的指针。。)
建议:用完了,还是还回去的好。。:)(推荐,还是加上一句p = nil;吧)

(3)操作指针时,超越了变量的作用范围。
(这种错误,真可以说是防不胜防。自己还在那里挠头了N久。。一直没想明白的错误)
建议:别人家的空间,还是别访问的好,偷窥人家隐私是不好的。。:lol

鄙人也就总结了这些,有补充的,赶紧告诉大家。。

作者: 米匠    时间: 2014-10-18 22:16
非常好。。。。
作者: songxing10000    时间: 2014-10-18 22:24
ARC会自动处理的貌似
作者: 弹琴骚年    时间: 2014-10-18 22:33
songxing10000 发表于 2014-10-18 22:24
ARC会自动处理的貌似

ARC不是主要负责对象的retain和release,还有autorelease么。。
应该不管指针变量这块吧。。
作者: songxing10000    时间: 2014-10-18 23:52
弹琴骚年 发表于 2014-10-18 22:33
ARC不是主要负责对象的retain和release,还有autorelease么。。
应该不管指针变量这块吧。。 ...

好像有什么选择,可以检测野指针还是僵尸对象什么的,其实我也不太懂,只是想围观一下罢了
作者: 弹琴骚年    时间: 2014-10-19 00:14
songxing10000 发表于 2014-10-18 23:52
好像有什么选择,可以检测野指针还是僵尸对象什么的,其实我也不太懂,只是想围观一下罢了 ...

欢迎围观。。:lol
在OC中,对象的确是用指针变量来存放的。
ARC管理机制的确可以更好地管理OC对象,防止OC对象的野指针和僵尸对象的产生。。
就是不知道ARC是不是也管理其他类型的指针变量的回收了,如int *a等的基本类型指针变量?
作者: 孙林    时间: 2014-10-19 00:58
mark。。。
作者: 微雨独行    时间: 2014-10-19 08:21
赞一个  楼主继续加油
作者: songxing10000    时间: 2014-10-19 08:38
弹琴骚年 发表于 2014-10-19 00:14
欢迎围观。。
在OC中,对象的确是用指针变量来存放的。
ARC管理机制的确可以更好地管理OC对象,防止O ...

貌似ARC是针对OC对象,基本数据类型不管
作者: ch8898163    时间: 2014-10-19 09:58
高大上,赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2