Answers:
当程序试图访问无法访问的部分内存或该程序试图访问一部分内存时,发生这样的错误:在Ubuntu和其他类似Unix的操作系统中出现段错误(或segfault或SIGSEGV),或者在Windows中发生通用保护错误。禁止访问。分段错误是程序崩溃的一种,即程序的异常终止。有关更多信息,请参阅Wikipedia上有关崩溃,内存保护,分段故障,常规保护故障和SIGSEGV的文章,以获取更多信息(并且比此处介绍的内容对本主题的理解更为深入)。
分段错误几乎总是归因于程序中发生的错误。我猜您的大多数或所有细分错误都来自同一应用程序。请提供有关计算机上发生分段错误的环境以及崩溃的程序的更多详细信息。请同时提供您收到的错误消息的完整和准确的文字,以及出现在错误消息之前的所有其他消息。这应该使我们能够针对您的问题提供详细的建议(而不仅仅是有关分段错误的一般信息)。
为您提供此信息的最佳方法是让您编辑问题以使其包含在内。或者,如果您希望该问题大体上是关于细分错误的信息,则可以发布一个新问题,以询问到底是什么导致细分错误(如果这样做,请确保在新问题中提供所有这些详细信息) 。
分段错误是由应用程序中的错误引起的。从技术上讲,这意味着应用程序尝试读取或写入不属于它(或不存在)的部分内存。当然,禁止读写其他人的内存,并且当系统(内核)检测到该内存时,它将强制应用程序退出。
人们过去一直在跟踪汇编代码并调试问题的日子已经一去不复返了。异常终止,沃森博士,细分错误。那些绿色的日子已经过去了。
分段错误的原因之一是当直接访问内存的代码失败时。当一段代码试图访问另一个应用程序的内存段时,就会发生分段错误。有时会移动内存分配,以允许分配更大的连续内存块。在尝试恢复时,内核会尽力将其所有内存信息保存到文件中,将正在cpu上运行的所有应用程序的当前状态以及它们的状态(最后一条指令运行)保存到文件中,然后死掉。它还将尝试存储尽可能多的恢复信息,并关闭尽可能多的文件,以使硬盘不会断开链接。
调试并修复它,如果您可以经常复制它。如果您无法复制它,只需双手合十,跪下祈祷,像地狱一样,不要“正常”看到它。
SIGSEGV
处理程序设置为除SIG_DFL
(转储核心并退出SIGSEGV
)以外的任何其他程序,因为如果您访问的内存不应该是那么,那么事情就变得非常困难了。错误,恢复可能是不可能的。(2)仅在进程停止后才转储核心。(3)核心转储仅包含已转储进程的内存和寄存器。(4)其他进程,CPU和内核不受另一个进程的段影响。