大家平常遇到EXC_BAD_ACCESS 是怎样解决的?

2013 年 3 月 26 日
 notedit
这两天被这个问题给虐死了 一段程序时好时坏
3774 次点击
所在节点    iDev
15 条回复
sumanx
2013 年 3 月 26 日
开启Zombie Enabled,如果找不到,就一段一段的屏蔽可能相关的dealloc。
一般是声明一个retain的property,结果赋值的时候没用self.xxx = yyy而是用了xxx = yyy导致的。

如果没用用arc,看有没有在dealloc里手误导致释放什么变量多释放了一次。。
alexrezit
2013 年 3 月 26 日
pointer 木有搞清楚吧... =.=
notedit
2013 年 3 月 26 日
@sumanx 使用了arc dealloc里也没有释放 是一些private的变量 然后传给其他的模块 然后就会出现这种情况 而且比较随机
notedit
2013 年 3 月 26 日
@alexrezit 确实没有搞清楚 边看边学也就一个多月
sumanx
2013 年 3 月 26 日
@notedit 用了arc,你得用retain的property来保存别的函数要用到的变量,不然如果你在a函数中给它赋值,a一执行结束,那个变量就被释放了,别处一使用就exc_bad_access
sumanx
2013 年 3 月 26 日
前面说的是对象。
yadizzz
2013 年 3 月 26 日
挂个全局断点,一crash就断到代码行了,无非就是野指针什么的问题
alexrezit
2013 年 3 月 26 日
@notedit
如果内存被释放而 pointer 没有设成 nil 就会继续指向那块无效的内存.
ydhydh
2013 年 3 月 26 日
时好时坏 ,多线程?
doskoi
2013 年 3 月 26 日
EXC_BAD_ACCESS 肯定是memory management的问题
不是zombile就是leak
instruments一般都能抓到
notedit
2013 年 3 月 26 日
@sumanx 如果我这边变量是private的呢 这种情况该怎么处理 我现在的做法是 在传递给另一个模块的时候把这个变量copy 一下 可以解决我的问题 但不知道是不是好的方法
notedit
2013 年 3 月 26 日
@sumanx 我把这个变量变成public 的然后用remain修饰 解决了
alexrezit
2013 年 3 月 26 日
qdvictory
2013 年 3 月 27 日
这种错误大多数情况下都是野指针造成的,不用的指针置nil是一个很好的习惯。
feihu
2013 年 3 月 27 日
malloc_history

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/64068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX