什么是分段错误?

在Ubuntu中,我多次遇到分段错误错误。 什么是分段错误?何时发生?

在Ubuntu和其他类Unix操作系统中表示分段错误 (或段错误SIGSEGV )或在Windows中说一般保护错误的错误是当程序试图访问无法访问的内存部分或程序时被禁止访问。 分段错误是一种程序崩溃,即程序的exception终止。 有关更多信息,请参阅有关崩溃 , 内存保护 , 分段错误 , 一般保护错误和SIGSEGV的维基百科文章(以及对此主题的更具纹理的理解,而不是此处介绍的内容)。

分段错误几乎总是由程序中出现的错误引起的。 我猜你的大多数或所有分段错误都是在同一个应用程序中发生的。 请提供有关机器上发生分段错误的情况以及崩溃的程序的更多详细信息。 还请提供您收到的错误消息的完整和准确的文本以及出现在其之前的任何其他消息。 这应该使我们能够提供针对您的问题的详细建议(而不仅仅是关于分段错误的一般信息)。

您提供此信息的最佳方式是编辑您的问题以包含它 。 或者,如果您希望此问题只是一般的分段错误,您可以发布一个新问题来询问导致您的分段错误的具体原因(如果您这样做,请务必在新问题中提供所有这些详细信息) 。

分段错误是由应用程序中的错误引起的。 从技术上讲,它意味着应用程序尝试读取或写入不属于它(或不存在)的部分内存。 它当然禁止读取或写入别人的内存,当系统(内核)检测到这种情况时,它会强制应用程序退出。

人们过去常常通过汇编代码和调试问题的日子已经一去不复返了。 Abends,Dr Watson,Segmentation fault。 那些绿色日子已经过去了。

分段错误的原因之一是直接访问内存的代码失败。 当一段代码试图访问不同应用程序的内存段时,会发生分段错误。 内存分配有时会移动,以允许分配更大的连续内存块。 当它试图恢复时,内核会努力将其所有内存信息保存到文件,cpu上运行的所有应用程序的当前状态以及它们的状态(最后一条指令运行)到文件并且只是死掉。 它还将尝试存储尽可能多的恢复信息,并尽可能多地关闭文件,以便hdd不会破坏链接。

调试它并修复它,如果你可以经常重现它。 如果你无法重现它,只要加入你的手,跪下来祈祷,就像你没有“经常”看到它一样。

Interesting Posts