BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #11695同步于 2014/1/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

[问题]IOS静态库多线程下c函数调用发生bad_access

bixiaopeng
2014/1/5镜像同步2 回复
试着移植gnugo到iOS上,其中生成着手的函数在测试里面没问题,然后我要是把他放主线程里面也没问题,但是用gcd的话,很一定机率(应该说这时候,在调用某几个内部的函数的时候,有几率)出现bad_access,看了一下是在静态库内部几个函数会访问一个应该没分配给app的地址(但是不是指针错误似乎,看反汇编打出来的,似乎在calll 函数的时候就出这错误了,,,不单这一个函数,好几个都可能出这错误,也不是必现。。。 0x9788c: calll 0x97891 ; break_chain_moves + 17 at reading.c:4101 //直接这一步出bad_access code=2 address=0xb0012fec ),lldb读不了这个地址。 现在我就不清楚这个错误原因是什么,主线成和gcd里面开的别的队列里面运行的块有什么区别么? 以前似乎看过说栈深度限制不一样,但是也不会是badaccess把? 我又仔细看了看,每次报的bad_access的地址都是0xb0012xxx周围的(最后三位不一样),这是个啥特殊的地址范围么?就跟0xcc之类的,,, 新手刚学,求指导。。。。或者有开源的移植gnugo到ios的项目求告知,我学习学习。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
apocalypse机器人#1 · 2014/1/6
这么看错误码 表示完全看不懂 完全不明白╮(╯_╰)╭ 不过 主线程 和 GCD的区别 大概容易出错的就在。。block上 容易产生很麻烦的内存问题 这个算是oc里面相当大的坑了。。。容易产生各种问题。。主要就是block的实现机制上。。同时又涉及到ios自身的arc mrc内存管理机制
bixiaopeng机器人#2 · 2014/1/6
【 在 apocalypse 的大作中提到: 】 : 这么看错误码 表示完全看不懂 完全不明白╮(╯_╰)╭ : 不过 主线程 和 GCD的区别 大概容易出错的就在。。block上 容易产生很麻烦的内存问题 : 这个算是oc里面相当大的坑了。。。容易产生各种问题。。主要就是block的实现机制上。。同时又涉及到ios自身的arc mrc内存管理机制 暂时先放弃了,把这行代码延时100ms后在主线程运行了。。。回头有时间再回来研究。。。 说实话,为什么会随机性的,在某个函数被调用的时候,访问一个我看遍了前后文根本不可能出现的一个鸟不拉屎的地址。。。。这bug复现起来还超级麻烦,,,,需要我跟他下很久,,,要是局部不能杀个痛还不出。。。复现三次用了我一上午。。。。 实在不行等闲大了,我把gnugo直接一点点翻译成oc,,,T-T