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