EXC_BAD_ACCESS(code = 1,address = 0x0)whenModalForWindow

问题描述:

我有一个窗口和一个窗口控制器,当用户点击一个按钮时打开。 有时我得到EXC_BAD_ACCESS(代码= 1,地址= 0x0)。EXC_BAD_ACCESS(code = 1,address = 0x0)whenModalForWindow

0x7fff6f2a59e0: movq (%rax), %rdi 

下面是代码:

ChooseProceduresWindowController *chooseProceduresWindowController = [[ChooseProceduresWindowController alloc] initWithWindowNibName:@"ChooseProceduresWindow"]; 
    [NSApp runModalForWindow:[chooseProceduresWindowController window]]; 

然后出现错误runModalForWindow:被调用。 我不会每次都遇到这个错误,但是我找不到模式。

谢谢

+0

这两个窗口是否保证在模式操作的整个持续时间内拥有('strong')? ARC无意提前发布的异常通常是“EXC_BAD_ACCESS”异常的原因,特别是在0x0处。 – Ephemera

当对象不存在于内存中时,将引发该错误。我开始寻找内存管理问题。首先要确保在使用它之后释放ChooseProceduresWindowController。

+0

当我尝试以模式打开它时,我在释放之前发现错误。 –

+0

你是否多次打开它并在第一次尝试中出错? –

+0

是的,我多次打开它,不,我没有在第一次尝试时出错。 –

调试EXC_BAD_ACCESS错误的最佳方法是使用NSZombies

看看这个视频说明:

http://youtu.be/LQtPr8bkB3g

NSZombie在内存中保存所有的对象,当你试图释放一个已经被释放的对象,所以你得到更接近于找到你的bug 。正如@Mark H所说,这是一个内存管理问题。

此外,您可以将NSLog放在您的dealloc方法中,以更好地了解在运行时将取消分配的内容。

+0

有时处于释放中间的对象抛出“不响应选择器”异常。有时EXC_BAD_ACCESS是由于阅读数组边界之外的数据(seg fault),如果我没有错的话......但是'NSZombies'是一个很好的开始。 –