A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 弹琴骚年 中级黑马   /  2014-10-18 21:50  /  1463 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

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

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

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

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

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

9 个回复

正序浏览
高大上,赞一个
回复 使用道具 举报
弹琴骚年 发表于 2014-10-19 00:14
欢迎围观。。
在OC中,对象的确是用指针变量来存放的。
ARC管理机制的确可以更好地管理OC对象,防止O ...

貌似ARC是针对OC对象,基本数据类型不管
回复 使用道具 举报
赞一个  楼主继续加油
回复 使用道具 举报
孙林 高级黑马 2014-10-19 00:58:06
7#
mark。。。
回复 使用道具 举报
songxing10000 发表于 2014-10-18 23:52
好像有什么选择,可以检测野指针还是僵尸对象什么的,其实我也不太懂,只是想围观一下罢了 ...

欢迎围观。。:lol
在OC中,对象的确是用指针变量来存放的。
ARC管理机制的确可以更好地管理OC对象,防止OC对象的野指针和僵尸对象的产生。。
就是不知道ARC是不是也管理其他类型的指针变量的回收了,如int *a等的基本类型指针变量?
回复 使用道具 举报
弹琴骚年 发表于 2014-10-18 22:33
ARC不是主要负责对象的retain和release,还有autorelease么。。
应该不管指针变量这块吧。。 ...

好像有什么选择,可以检测野指针还是僵尸对象什么的,其实我也不太懂,只是想围观一下罢了
回复 使用道具 举报
songxing10000 发表于 2014-10-18 22:24
ARC会自动处理的貌似

ARC不是主要负责对象的retain和release,还有autorelease么。。
应该不管指针变量这块吧。。
回复 使用道具 举报
ARC会自动处理的貌似
回复 使用道具 举报
非常好。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马