异常代码:KERN_PROTECTION_FAILURE at 0x00000000 错误
Posted
技术标签:
【中文标题】异常代码:KERN_PROTECTION_FAILURE at 0x00000000 错误【英文标题】:Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000 Error 【发布时间】:2011-04-04 15:18:02 【问题描述】:Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
什么是内核保护错误? 在哪里可以清楚地找到异常类型和代码的详细信息?
【问题讨论】:
【参考方案1】:您可以在 /usr/include/mach/exception_types.h 中查看 Mach 内核异常的完整列表。大多数(如果不是全部)都归结为“你的程序做错了什么”。
正如 hotpaw2 已经告诉你的那样,在这种情况下你做错的具体事情是取消引用 NULL
。您可能已经在自己的代码中直接完成了此操作,或者通过将 NULL
传递给某个库函数或框架方法来间接完成此操作。例如,将NULL
作为指针参数之一传递给memcpy
是导致此崩溃的好方法。
请注意,将 Objective-C 消息发送到 nil
是可以的——它什么都不做并返回 0。另一方面,在消息中将 nil
作为参数传递可能不合适。在不需要的地方传递nil
可能会导致抛出NSException(这将导致SIGTRAP
,而不是SIGBUS
,信号),或者可能导致某些代码最终取消引用NULL
。或者它可能是完全无害的。但是你不应该这样做,除非文档明确说没关系,否则,即使它现在可以工作,它也可能在以后中断。
【讨论】:
【参考方案2】:操作系统不允许用户应用访问(读取或写入)某些内存地址。地址 0(NULL 或 nil 指针指向的地址)是这些地址之一。一个非常常见的原因是代码使用了从未初始化过的指针。
【讨论】:
以上是关于异常代码:KERN_PROTECTION_FAILURE at 0x00000000 错误的主要内容,如果未能解决你的问题,请参考以下文章
java中如果程序中报的异常是e,用代码来获得此异常的信息是?