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

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

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

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

https://www.v2ex.com/t/64068

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

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

© 2021 V2EX