Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
什麼是內核保護錯誤?
我在哪裏可以清楚地找到有關異常類型和代碼的詳細信息?例外代碼:KERN_PROTECTION_FAILURE at 0x00000000錯誤
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
什麼是內核保護錯誤?
我在哪裏可以清楚地找到有關異常類型和代碼的詳細信息?例外代碼:KERN_PROTECTION_FAILURE at 0x00000000錯誤
您可以在/usr/include/mach/exception_types.h中看到Mach內核異常的完整列表。大部分(如果不是全部)歸結爲「你的程序做錯了什麼」的某種味道。
由於hotpaw2已經告訴你,在這種情況下你做錯了具體的事情是取消引用NULL
。您可能直接在自己的代碼中完成此操作,或者通過將NULL
傳遞給某些庫函數或框架方法來間接完成此操作。例如,將NULL
作爲memcpy
的指針參數之一傳遞是導致此崩潰的好方法。
請注意,發送一個Objective-C消息到nil
是好的 - 它什麼也不做,並返回0.另一方面,在消息中傳遞nil
作爲參數可能不正確。在不需要的地方傳遞nil
可能會導致引發NSException(這將導致SIGTRAP
而不是SIGBUS
信號),或者可能導致某些代碼最終取消引用NULL
。或者它可能完全無害。但是除非文檔明確說明它是可以的,否則你不應該這樣做,否則,即使它現在起作用,它可能會在稍後中斷。
操作系統不允許用戶應用程序訪問(讀取或寫入)某些內存地址。地址0(NULL或零指針指向什麼)是這些地址之一。這種情況的一個常見原因是使用從未初始化的指針的代碼。