如何解决KERN_PROTECTION_FAILURE和KERN_INVALID ADDRESS? 当我运行我的应用程序时,两者似乎都发生在完全相同的位置。
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
和
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
奇怪的是,它在iPad 1(iOS 4.2.1)上崩溃,但在iPad 2(iOS 4.3.2)上没有崩溃。 这可能是iPad本身的问题,也可能是内存的问题?或者它真的是我的代码中的错误?如果是这样,为什么我不能在iPad 2上重现它?
答案 0 :(得分:11)
EXC_BAD_ACCESS
错误通常是尝试将消息发送到已解除分配的对象。在这种情况下,您的NSOperation
中似乎已经发布了某些内容。这几乎肯定是代码中的错误。至于为什么它发生在一个iPad而不是另一个iPad上,可能是因为在一个设备上,用于包含你的对象的内存已被重用,但另一方面它仍然有你的对象的僵尸。
更全面的解释是here。