O que é uma falha de segmentação?

25

No Ubuntu, enfrentei o erro de falha de segmentação muitas vezes. O que é uma falha de segmentação e quando ocorre?

    
por Tachyons 17.05.2012 / 15:59

3 respostas

22

Um erro que diz falha de segmentação (ou segfault ou SIGSEGV ) no Ubuntu e em outros sistemas operacionais semelhantes ao Unix, ou dizendo falha de proteção geral no Windows, é quando um programa tenta acessar uma parte da memória que não pode ser acessada ou que o programa é proibido de acessar. Uma falha de segmentação é um tipo de falha de programa, isto é, uma finalização anormal de um programa. Veja os artigos da Wikipedia sobre falhas , , falha de segmentação , general protection , e SIGSEGV para mais informações (e mais compreensão texturizada do tópico do que é apresentado aqui).

Uma falha de segmentação é quase sempre causada por um erro no programa em que ocorre. Eu estou supondo que a maioria ou todas as falhas de segmentação estão acontecendo no mesmo aplicativo. Por favor, forneça mais detalhes sobre as circunstâncias sob as quais falhas de segmentação estão ocorrendo em sua máquina, e qual programa está falhando. Por favor, forneça também o texto completo e exato da mensagem de erro que você está recebendo e quaisquer outras mensagens que apareçam antes. Isso deve nos permitir fornecer conselhos detalhados específicos para o seu problema (em vez de apenas informações gerais sobre o que é uma falha de segmentação).

A melhor maneira de você fornecer essas informações é editar sua pergunta para incluí-la . Alternativamente, se você quiser que esta questão seja apenas sobre falhas de segmentação em geral, você poderia postar uma nova pergunta para perguntar sobre o que especificamente está causando falhas de segmentação (se você fizer isso, forneça todos esses detalhes em sua nova pergunta) .

    
por Eliah Kagan 17.05.2012 / 16:11
4

Falha de segmentação é causada por um erro no aplicativo. Tecnicamente, isso significa que o aplicativo tenta ler ou gravar em parte da memória que não pertence a ela (ou não existe). É claro que é proibido ler ou escrever na memória de outra pessoa e quando o sistema (kernel) detectar isso, forçará o aplicativo a sair.

    
por Vojtech Trefny 17.05.2012 / 16:09
0

Já se foram os dias em que as pessoas costumavam rastrear o código da montagem e depurar um problema. Abends, Dr. Watson, falha de segmentação. Aqueles dias verdes se foram.

Uma das razões para uma falha de segmentação é quando o código que tem acesso direto à memória falha. Quando um trecho de código tenta acessar o segmento de memória de um aplicativo diferente, ocorre uma falha de segmentação. As alocações de memória são algumas vezes movidas para permitir que blocos de memória contíguos maiores sejam alocados. Enquanto ele tenta se recuperar, o kernel tenta salvar todas as informações de memória em um arquivo, o estado atual de todos os aplicativos em execução no cpu e seu estado (última execução de instrução) em um arquivo e simplesmente morrer. Ele também tentará armazenar o máximo de informações de recuperação e fechar quantos arquivos puder, de forma que os discos rígidos não obtenham links quebrados.

Depure e conserte-o se puder reproduzi-lo com frequência. Se você não pode reproduzi-lo, apenas junte suas mãos, ajoelhe-se e ore como o inferno para que você não o veja "regularmente".

    
por Siddharth 18.01.2013 / 06:34