什么是细分错误?


27

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


1
只是掩盖它:我有一个类似的问题,但是我的段错误无法可靠地复制,并且(几乎)来自随机应用程序。发现我的记忆很可能坏了。因此,如果有相当多的程序导致段错误,则可以仔细查看RAM。

Answers:


25

当程序试图访问无法访问的部分内存或该程序试图访问一部分内存时,发生这样的错误:在Ubuntu和其他类似Unix的操作系统中出现段错误(或segfaultSIGSEGV),或者在Windows中发生通用保护错误。禁止访问。分段错误是程序崩溃的一种,即程序的异常终止。有关更多信息,请参阅Wikipedia上有关崩溃内存保护分段故障常规保护故障SIGSEGV的文章,以获取更多信息(并且比此处介绍的内容对本主题的理解更为深入)。

分段错误几乎总是归因于程序中发生的错误。我猜您的大多数或所有细分错误都来自同一应用程序。请提供有关计算机上发生分段错误的环境以及崩溃的程序的更多详细信息。请同时提供您收到的错误消息的完整和准确的文字,以及出现在错误消息之前的所有其他消息。这应该使我们能够针对您的问题提供详细的建议(而不仅仅是有关分段错误的一般信息)。

为您提供此信息的最佳方法是让您编辑问题以使其包含在内。或者,如果您希望该问题大体上是关于细分错误的信息,则可以发布一个新问题,以询问到底是什么导致细分错误(如果这样做,请确保在新问题中提供所有这些详细信息) 。


幸运的是,通过升级os :)可以解决所有分段错误。我的问题通常是关于细分错误的。不是针对特定应用的。
短剑

@我不是这个人,我已经相应地编辑了我的答案。(即使我知道您现在不需要他们的特殊帮助,我仍会保留提供更多信息的方向,以便其他用户遇到分段错误。)
Eliah Kagan 2012年

好吧,这是关于应用程序中的细分错误。我想问一下它发生在C ++程序中,因为同一程序在Windows或Turbo C ++(在酒中)运行得很好(我在Linux中使用anjuta)。而且这些只是基本程序而不是应用程序(像TREES这样的程序) ,
GRAPHS

谢谢。但是我担心在大多数情况下,关于应用程序中的分段错误的问题不在这里。:)
Tachyons,2012年

@Nirmik:大概这是stackoverflow的主题:)
Tachyons,

4

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


0

人们过去一直在跟踪汇编代码并调试问题的日子已经一去不复返了。异常终止,沃森博士,细分错误。那些绿色的日子已经过去了。

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

调试并修复它,如果您可以经常复制它。如果您无法复制它,只需双手合十,跪下祈祷,像地狱一样,不要“正常”看到它。


可以在以允许直接内存访问的语言编写的任何程序中触发段错误。它们通常也不会使内核崩溃。
Alex L.

@AlexL。那是准确的。我将编辑我的答案。
Siddharth

我希望我已经正确表达了我的想法。
Siddharth

@AlexL。您能否再请一次。如果仍然不正确,我将其删除。
2013年

这个更好。尽管如此,(1)尽管可能,但程序很少将SIGSEGV处理程序设置为除SIG_DFL(转储核心并退出SIGSEGV)以外的任何其他程序,因为如果您访问的内存不应该是那么,那么事情就变得非常困难了。错误,恢复可能是不可能的。(2)仅在进程停止后才转储核心。(3)核心转储仅包含已转储进程的内存和寄存器。(4)其他进程,CPU和内核不受另一个进程的段影响。
Alex L.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.