【问题标题】:How to solve KERN_PROTECTION_FAILURE and KERN_INVALID_ADDRESS?如何解决 KERN_PROTECTION_FAILURE 和 KERN_INVALID_ADDRESS?
【发布时间】:2011-09-11 16:23:33
【问题描述】:

如何解决 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 上重现它?

【问题讨论】:

  • 我正在调查这样的崩溃。自发布以来,我有几千名用户将使用我的新版本,而我只有 4 人在发布时反复崩溃。所有这些都在 iOS 4.2.1 上(这在当今比较少见 - 可能是 10% 的用户群?),在您的示例中也是如此。你还记得你的解决方案是什么吗?
  • 我最近遇到了这个问题,这是最热门的搜索结果,所以我把它放在这里希望它可以帮助其他人像我一样在这里结束。我有一个 NSArray 对象。我遍历了 for() 循环中的每个对象,然后释放了数组(它应该释放所有对象,在我的情况下,释放它们)。当我释放阵列时,我因此错误而崩溃。事实证明,原因是我在数组中不止一次拥有相同的对象,一旦我确保每个对象只添加到数组中一次,这个问题就消失了。希望对某人有所帮助!

标签: objective-c ios ipad


【解决方案1】:

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

更详尽的解释是here

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2011-12-25
    • 2012-07-10
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多