2011-06-09 162 views
12

如何解決KERN_PROTECTION_FAILURE和KERN_INVALID地址? 當我運行我的應用程序時,兩者似乎都發生在同一地點。如何解決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

我正在調查這樣的崩潰。我有幾千用戶會在發佈後使​​用我的新版本,並且我只有4人在發佈時重複崩潰。 所有這些都在iOS 4.2.1上(現在比較少見 - 也許10%的用戶羣?),在您的示例中也是如此。你記得你的解決方案是什麼嗎? – 2012-02-03 15:29:02

+1

我最近遇到了這個問題,這是最熱門的搜索結果,所以我在這裏提出這個問題,希望它能幫助別人像我一樣在這裏結束。 我有一個NSArray的對象。我迭代了for()循環中的每個對象,然後釋放該數組(應該釋放所有對象,在我的情況下,釋放它們)。當我釋放數組時,我遇到了這個錯誤。 原來,爲什麼我不止一次在數組中有同一個對象,一旦我確定每個對象只被添加到數組中一次,這個問題就消失了。希望能幫助別人! – Pedro 2012-08-09 00:54:13

回答

9

EXC_BAD_ACCESS錯誤通常來自嘗試向已釋放的對象發送消息。在這種情況下,它似乎已經在您的NSOperation中發佈了。這幾乎肯定是你的代碼中的一個錯誤。至於爲什麼它發生在一臺iPad而不是另一臺iPad上,可能是因爲在一臺設備上用來包含對象的內存已被重用,但另一臺設備上仍然存在殭屍對象。

更徹底的解釋是here