异常代码: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:抛出异常后如何终止执行后面的代码?

sop代码未处理系统线程异常

java中如果程序中报的异常是e,用代码来获得此异常的信息是?

java中代码发生异常后 程序会怎么执行?

php的异常处理,一个try代码块中抛出了多个异常,怎么全都捕获,并输出来?下面的代码为只输出一个异常?

关于异常处理