变量被破坏了

时间:2011-08-18 05:55:20

标签: objective-c crash exc-bad-access

我正在使用基于Apple的UIKit的Objective-C开发iPhone应用程序。

我在UIViewController中创建了一些类实例,发现我的类实例指针随机被破坏。由于类实例指针已损坏,我总是得到这样的EXC_BAD_ACCESS崩溃:     例外类型:EXC_BAD_ACCESS(SIGSEGV)     例外代码:KERN_INVALID_ADDRESS位于0xa095633c     崩溃的线程:0

它表明当我的代码试图访问类实例时,它已经变成了一个荒谬的地址:0xa095633c,它超出了内存空间甚至是二进制图像空间。

有没有任何建议可能导致类实例被破坏的错误编码是什么?

4 个答案:

答案 0 :(得分:3)

有很多事情可以导致这种情况。仅举几例:

  • 访问已删除的对象
  • 不正确的多线程
  • 指针算术中的错误
  • 堆栈损坏
  • 走出数组的界限

学习使用调试器和调试日志记录来跟踪无效指针出现的位置和时间。

尝试创建一个可以重现问题的小型测试程序,以便发布代码示例。

答案 1 :(得分:2)

EXC_BAD_ACCESS通常表示内存管理错误。阅读Memory Management Programming Guide并确保您遵守有关alloc / retain / release / etc的所有规则。

答案 2 :(得分:0)

在分配变量时是否尝试保留对象?

一个简单的例子:

variable = [[[UIViewController alloc] init] retain];

另一种解决方案可能是将实例变量声明为属性为“retain”的属性:

@property(nonatomic, retain) UIViewController *variable;

答案 3 :(得分:0)

这种错误的最可能原因是对象过早地被释放,而其他一些内存被写入其位置。尝试打开仪器中的Zombies,它会告诉你是否是这种情况。