2010-08-27 35 views

回答

3

您可以在/usr/include/mach/exception_types.h中看到Mach內核異常的完整列表。大部分(如果不是全部)歸結爲「你的程序做錯了什麼」的某種味道。

由於hotpaw2已經告訴你,在這種情況下你做錯了具體的事情是取消引用NULL。您可能直接在自己的代碼中完成此操作,或者通過將NULL傳遞給某些庫函數或框架方法來間接完成此操作。例如,將NULL作爲memcpy的指針參數之一傳遞是導致此崩潰的好方法。

請注意,發送一個Objective-C消息到nil是好的 - 它什麼也不做,並返回0.另一方面,在消息中傳遞nil作爲參數可能不正確。在不需要的地方傳遞nil可能會導致引發NSException(這將導致SIGTRAP而不是SIGBUS信號),或者可能導致某些代碼最終取消引用NULL。或者它可能完全無害。但是除非文檔明確說明它是可以的,否則你不應該這樣做,否則,即使它現在起作用,它可能會在稍後中斷。

3

操作系統不允許用戶應用程序訪問(讀取或寫入)某些內存地址。地址0(NULL或零指針指向什麼)是這些地址之一。這種情況的一個常見原因是使用從未初始化的指針的代碼。