objective-c – 如何解决KERN_PROTECTION_FAILURE和KERN_INVALID_ADDRESS?

前端之家收集整理的这篇文章主要介绍了objective-c – 如何解决KERN_PROTECTION_FAILURE和KERN_INVALID_ADDRESS?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
您如何解决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本身还是与内存有关的问题?还是我的代码真的是一个bug?如果是这样,为什么我不能在iPad 2上重现它?

解决方法

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

一个更彻底的解释是here.

原文链接:https://www.f2er.com/c/112924.html

猜你在找的C&C++相关文章