Objective-C 中的分段错误是啥?

Posted

技术标签:

【中文标题】Objective-C 中的分段错误是啥?【英文标题】:What is segmentation fault in Objective-C?Objective-C 中的分段错误是什么? 【发布时间】:2012-07-23 12:54:31 【问题描述】:

我编写了一个小的 Objective-C 程序来归档一个对象。该对象是一个 NSDictionary。编译时没有问题。但是当它被调用时,它在终端中显示一条消息“分段错误”,并且没有创建存档 XML 文件。该问题是由 writeToFile 方法引起的,因为在我将其注释掉之后没有错误(当然也没有存档)。这个错误信息是什么意思?以及如何解决?

我刚刚找到了问题的原因。我的程序基于书中的示例,并且存在打印错误,因此字典对象从未真正初始化。抱歉,我在提问之前没有仔细检查这个问题。

【问题讨论】:

您必须显示一些代码,以便有人可以诊断它。 一般来说,内存访问错误导致的段错误,但通常你会在objective-c中得到错误的访问错误。发布您的 writeToFile 方法和任何相关代码 - 我不是千里眼,SO 上的其他人也不是(除了 jon skeet)。 【参考方案1】:

分段错误是由尝试取消引用错误指针引起的。您传递给writeToFile: 的文件实例可能为零。您需要检查您的返回码是否成功,并检查您的指针是否都有效。

鉴于当您注释掉该行时它不会崩溃,您只需要确保该调用的所有参数都有效并且您会发现您的错误。

更多阅读:

What is a segmentation fault?

【讨论】:

【参考方案2】:

分段错误通常意味着您的程序正在访问它不应该访问的内存。在调试器中运行你的程序,它应该会告诉你错误发生在哪里。

【讨论】:

【参考方案3】:

没有任何示例代码很难确定确切的问题,但是当 CPU 尝试访问不属于它的内存时会发生分段错误。这通常意味着您有一个未初始化的指针,或者没有指向正确的位置,然后您尝试取消引用它导致崩溃。我建议梳理你的代码,并确保你所有的指针都在做你期望他们做的事情。

【讨论】:

是的,该对象从未初始化。我从书中复制了这个例子,没有仔细检查。谢谢。

以上是关于Objective-C 中的分段错误是啥?的主要内容,如果未能解决你的问题,请参考以下文章

由于 Objective-C 中的整数溢出,处理和报告内存分配错误的最佳方法是啥?

是啥导致发生分段错误?

是啥导致了这种分段错误?

分段错误错误(信号名称:SIGSEGV)的原因是啥,我将如何找到/修复它?

Objective-C 中的“&error”是啥意思? [复制]

Objective-C中的 id, isa,和 instancetype