如何解决KERN_PROTECTION_FAILURE和KERN_INVALID_ADDRESS?

[英]How to solve KERN_PROTECTION_FAILURE and KERN_INVALID_ADDRESS?


How can you solve a KERN_PROTECTION_FAILURE and a KERN_INVALID ADDRESS? Both seem to happen at exactly the same spot when I run my app.

如何解决KERN_PROTECTION_FAILURE和KERN_INVALID地址?当我运行我的应用程序时,两者似乎都发生在完全相同的位置。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x6d783f44
Crashed Thread:  2

Thread 2 Crashed:
0   libobjc.A.dylib                 0x34a80464 objc_msgSend + 16
1   Foundation                      0x31171dda __+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]_block_invoke_7 + 10
2   libSystem.B.dylib               0x30dd9678 _dispatch_call_block_and_release + 12
3   libSystem.B.dylib               0x30dd9b98 _dispatch_worker_thread2 + 120
4   libSystem.B.dylib               0x30d7e24a _pthread_wqthread + 258
5   libSystem.B.dylib               0x30d76970 start_wqthread + 0

And:

和:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000011
Crashed Thread:  7

Thread 7 Crashed:
0   libobjc.A.dylib                 0x34a80464 objc_msgSend + 16
1   Foundation                      0x31171dfc -[NSOperation completionBlock] + 16
2   Foundation                      0x31171dda __+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]_block_invoke_7 + 10
3   libSystem.B.dylib               0x30dd9678 _dispatch_call_block_and_release + 12
4   libSystem.B.dylib               0x30dd9b98 _dispatch_worker_thread2 + 120
5   libSystem.B.dylib               0x30d7e24a _pthread_wqthread + 258
6   libSystem.B.dylib               0x30d76970 start_wqthread + 0

Weird thing is, it crashes on an iPad 1 (iOS 4.2.1) but not on an iPad 2 (iOS 4.3.2). Could this maybe be a problem with the iPad itself or maybe with the memory? Or is it truly a bug in my code? If so, why can't I reproduce it on the iPad 2?

奇怪的是,它在iPad 1(iOS 4.2.1)上崩溃,但在iPad 2(iOS 4.3.2)上没有崩溃。这可能是iPad本身的问题,也可能是内存的问题?或者它真的是我的代码中的错误?如果是这样,为什么我不能在iPad 2上重现它?

1 个解决方案

#1


10  

EXC_BAD_ACCESS errors are typically from trying to send a message to an object that has been deallocated. In this case, it appears to be something in your NSOperation that has been released already. This is almost certainly a bug in your code. As for why it happens on one iPad and not the other, it could be that on one device the memory that used to contain your object has been reused but on the other it still has a zombie of your object.

EXC_BAD_ACCESS错误通常是尝试将消息发送到已解除分配的对象。在这种情况下,您的NSOperation中似乎已经发布了一些内容。这几乎肯定是代码中的错误。至于为什么它发生在一个iPad而不是另一个iPad上,可能是因为在一个设备上,用于包含对象的内存已被重用,但另一方面它仍然有一个对象的僵尸。

A much more thorough explanation is here.

这里有一个更彻底的解释。


注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:http://www.itdaan.com/blog/2011/06/09/4446a1015ced8a31164e6a68115efc2d.html



 
© 2014-2018 ITdaan.com 粤ICP备14056181号