解析:Program received signal: “EXC_BAD_ACCESS"

在练习时,有这么段代码:
    CALayer *sublayer = [CALayer layer];
    sublayer.backgroundColor = [UIColor blueColor].CGColor;
    sublayer.shadowOffset = CGSizeMake(0, 3);
    sublayer.shadowRadius = 5.0;
    sublayer.shadowColor = [UIColor blackColor].CGColor;
    sublayer.shadowOpacity = 0.8;
    sublayer.frame = CGRectMake(30, 30, 128, 192);
    [self.view.layer addSublayer:sublayer];
由于被书上的内存泄露吓唬住了,所以又在最后追加了[sublayer release];来释放内存而在程序调试运行退出时碰到了Program received signal: “EXC_BAD_ACCESS" 错误。经网络搜索搞清楚了这个错误产生的几个原因:

1、访问受保护或者不存在的内存空间,导致返回了一个错误的指针;

2、访问未进行内存分配或初始化的内存空间;

3、在对象被释放后仍然采用原来的指针进行访问;

4、采用了[object release]释放对象,但其实对象并未采用 alloc/copy/retain 等形式进行内存分配;(这是我此次错误的原因)

5、其他不合法的内存访问方式;
 
总之,对于常见的EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION,错误,一般都是因为访问已经被release的对象造成的。尤其是在一个线程中访问另外一个线程的autorelease库中的对象,尤其要注意此类问题
"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、付费专栏及课程。

余额充值