No Ubuntu, já enfrentei o erro de falha de segmentação muitas vezes. O que é uma falha de segmentação e quando ocorre?
No Ubuntu, já enfrentei o erro de falha de segmentação muitas vezes. O que é uma falha de segmentação e quando ocorre?
Respostas:
Um erro ao dizer falha de segmentação (ou segfault ou SIGSEGV ) no Ubuntu e 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 para qual programa. é proibido acessar. Uma falha de segmentação é um tipo de falha no programa, ou seja, um encerramento anormal de um programa. Veja os artigos da Wikipedia sobre acidentes , proteção de memória , falha de segmentação , falha de proteção geral , e SIGSEGV para mais informações (e uma compreensão mais texturizada do tema do que é apresentado aqui).
Uma falha de segmentação ocorre quase sempre devido a um erro no programa em que ocorre. Suponho que a maioria ou todas as suas falhas de segmentação estejam ocorrendo no mesmo aplicativo. Forneça mais detalhes sobre as circunstâncias em que as falhas de segmentação estão acontecendo em sua máquina e qual programa está travando. Forneça também o texto completo e exato da mensagem de erro que você está recebendo e quaisquer outras mensagens que aparecerem antes dela. Isso deve permitir que forneçamos 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 fornecer essas informações é editar sua pergunta para incluí-la . Como alternativa, se você deseja que esta pergunta seja apenas sobre falhas de segmentação em geral, você pode postar uma nova pergunta para perguntar o que especificamente está causando suas falhas de segmentação (se você fizer isso, forneça todos esses detalhes em sua nova pergunta) .
A falha de segmentação é causada por um erro no aplicativo. Tecnicamente, significa que o aplicativo tenta ler ou gravar em parte da memória que não pertence a ele (ou não existe). Obviamente, é proibido ler ou gravar na memória de outra pessoa e quando o sistema (kernel) detectar isso, forçará o encerramento do aplicativo.
Longe vão os dias em que as pessoas costumavam rastrear o código do assembly e depurar um problema. Abends, Dr. Watson, falha na segmentação. Esses dias verdes se foram.
Um dos motivos 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. Algumas vezes, as alocações de memória são movidas para permitir que blocos maiores de memória sejam alocados. Enquanto 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 na CPU e seu estado (última instrução executada) em um arquivo e simplesmente morre. Ele também tentará armazenar o máximo de informações de recuperação e fechar o máximo de arquivos possível, para que os discos rígidos não obtenham links quebrados.
Depure-o e corrija-o se você puder reproduzi-lo frequentemente. Se você não conseguir reproduzi-lo, apenas junte suas mãos, ajoelhe-se e ore como o inferno para que não o veja "regularmente".
SIGSEGV
manipulador para algo diferente de SIG_DFL
(que é despejar o núcleo e sair para a SIGSEGV
), pois se você estiver acessando a memória, não deveria estar, então algo ocorreu muito errado e recuperação é provavelmente impossível. (2) Um núcleo será descartado apenas quando o processo for interrompido. (3) O dump principal inclui apenas a memória e os registros do processo que foi despejado. (4) Outros processos, a CPU e o kernal não são afetados por uma falha de outro processo.