EXC_BAD_ACCESS 和“thread 1: signal SIGABRT”

在xcode进行Objective-C开发时遇到了EXC_BAD_ACCESS 错误导致Crash。这个错误应该是表示溢出了。经检查后是使用了未被分配的线程。但这种问题无从找起,Xcode也不会提示错误代码。
可以使用NSZombieEnabled 的方法定位错误,使用方法如下。

可以点击 Xcode 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将 NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.

或者在 Xcode 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。


随后是在调试的过程中发现遇到“thread 1: signal SIGABRT”的错误,一般问题产生的原因是,在使用控件,在类中修改了控件的名称,但是控件依旧绑定的是之前的名称,产生了这个错误。

解决方法:将控件重新拖拽到改名后的地方即可。但是本次我碰到的是,在线程运行过程中,我在此启动了该线程,因此引起这个错误。因此线程启动的触发事件之间的逻辑关系需要注意。避免这种错误。


"thread 1: exc_bad_access code" 是指在程序运行时发生了“访问非法内存”的错误。这种错误通常是由于代码中对一个不存在或不可访问的内存地址进行读取或写入操作引起的。 当一个线程尝试访问一个无效的内存地址时,操作系统会报告一个异常(exception),通常称为“exc_bad_access”。这个异常的错误代码(code)可能会提供更多关于错误的具体信息。 常见的导致“exc_bad_access code”错误的情况包括: 1. 空指针引用:尝试访问一个指向空地址的指针。 2. 野指针引用:尝试访问一个已经释放或不再有效的内存。 3. 数组越界访问:尝试访问一个数组之外的元素。 4. 访问已释放的对象:尝试访问一个已经释放的对象的成员变量或方法。 5. 内存溢出:尝试访问操作系统未分配给程序的内存空间。 要解决“thread 1: exc_bad_access code”错误,可以通过以下方式: 1. double-check代码中的指针或数组访问,确保没有空指针引用或越界访问。 2. 确保在访问动态分配的内存(如对象或数组)之前,它们已经正确地分配初始化。 3. 如果有多个线程访问同一块内存,请使用同步机制(如互斥锁)来避免竞争条件数据访问冲突。 4. 调试程序以查找并纠正任何内存错误,可以使用调试器或打印出相关变量的值进行排查。 总之,“thread 1: exc_bad_access code”表示程序出现了访问非法内存的错误,需要审查代码并修复相关问题才能消除错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值