Olá pessoal,
Venho treinando nos últimos dias com o foco na OBI 2010 e, quem sabe, na IOI 2010 (se Deus quiser!), no site de treinamento da equipe dos Estados Unidos, mais conhecido como USACO Training Program e percebi que é uma fonte impressionante de treinamento para competições de programação, especialmente as citadas acima. Durante algumas resoluções de problemas me deparei com um erro chamado “Segmentation Fault” quando eu tentava executar o programa e resolvi pesquisar a respeito para esclarecer melhor na minha mente e poder passar a todos, já que não é um erro tão raro de ocorrer em programas.
Quando se tem um irmão expert em C++ e amante de competições de programação assim como eu tenho, é bem mais fácil tirar as dúvidas, portanto segue a explicação (adaptada) que Herbert Duarte deu para esse problema.
Segfault, como também é conhecido, ocorre quando um programa está tentando acessar uma área de memória protegida, ou seja, que não faz parte de seu endereçamento (espaço da memória revervado pelo Sistema Operacional para cada um dos programas que estão sendo executados), ou quando tenta acessar um local de forma inapropriada, como por exemplo, tentando escrever em um espaço que é de somente-leitura. As causas mais comuns para esse tipo de erro são as seguintes:
- Ponteiros não inicializados ou com valores inválidos, pois quando o programa tenta acessá-lo provavelmente irá cair em algum lugar aleatório da memória que o programa não tem acesso;
- Acessar uma posição inválida de matrizes ou vetores, já que o programa irá calcular a posição como se ela existisse e provavelmente irá cair em um local sem acesso (ocorrendo frequentemente quando o programa calcula, em alguma situação, uma posição para ser acessada, porque, se houver qualquer erro nesse cálculo, a posição acessada será inválida);
- Tentar alterar um caracter de uma string que foi inicializada como “Somente leitura”.
Bem, dessa forma, espero que cuidem melhor de seus programas para não caírem nesse mesmo erro, lembrando apenas que Segmentation Fault não é um erro de compilação de código, mas um erro de execução de programa.
Fonte para auxílio: Segmentation Fault – Wikipedia
Posts interessantes:
Mais algum erro está perturbando vocês? Comente e nos conte que procuraremos sempre ajudá-lo!
Helton de Melo Duarte
“Eu, porém, estou aflito e necessitado; apressa-te por mim, ó Deus; tu és o meu auxílio e o meu libertador; SENHOR, não te detenhas.” Salmos 70.5
“Por ti tenho sido sustentado desde o ventre; tu és aquele que me tiraste do ventre de minha mãe; o meu louvor será para ti constantemente.” Salmos 71.6

fevereiro 6th, 2010 at 0:21
[...] Sugestões « Segmentation Fault – a memória do PC pede ajuda! [...]
fevereiro 15th, 2010 at 18:13
Opa, concorrente a vista! Seu ultimo ano também? Boa sorte pra gente
março 3rd, 2010 at 10:44
[...] Segmentation Fault – a memória do PC pede ajuda! [...]