falha de segmentação em 14.04, mas não falhou em 10.04

0

Estou usando o Ubuntu 14.04 64bit LTS e estou escrevendo o programa de processamento de imagem em C. Quando eu estou rodando qualquer programa no terminal, ele mostra falha de segmentação (núcleo despejado). O mesmo programa funciona bem em 10.04.

Qualquer ajuda por favor?

$ cc -o out.e sub.c -lm
$ ./out.e
Segmentation fault (core dumped)
    
por user312911 14.10.2014 / 08:32

1 resposta

1

O que realmente aconteceu em detalhes é difícil de dizer, mas darei um exemplo do tipo de problema.

O importante é que o programa funcionou em 10.04, mas falha em 14.0. O problema exato pode ser diferente, mas semelhante e relacionado:

Algo é contra as regras

O erro "falha de segmentação" normalmente significa que foi acessada alguma memória que não pertence ao programa. Pode ser que em 10.04 e 14.04, houvesse um acesso ilegal à memória, mas não causou nenhum problema em 10.04.

Regras não são rigorosamente aplicadas

Isso significaria que funcionou apenas por acaso em 10.04; Isso é bem possível, porque, por muitas razões, a memória próxima à memória "oficial" do seu programa também pode pertencer ao seu programa tecnicamente.
Isso é para tornar as coisas mais fáceis para o compilador, ou para tornar o programa mais rápido com um acesso mais regular à memória.
Com isso, o programa pode fazer coisas que não é permitido fazer com base no texto do programa.

A tolerância pode mudar

Qual memória "inoficial" que você pode acessar sem uma falha de segmentação depende da versão do compilador e das versões da biblioteca, que foram alteradas.

O caso mais simples e mais comum deve ser que haja um bug no programa em que o acesso à memória foi muito longe, como acessar o byte após uma matriz por um erro de um por um no índice.

Resumo

O bug existia antes, mas funcionou de qualquer maneira.
Agora, isso não funciona, e é apenas um bug normal que causa uma falha de segmentação.

Para um aspecto positivo: quando funcionou, com o bug, ele pode ter criado resultados errados - o que é muito pior do que o que você vê agora.


Aplicar as regras

Uma boa abordagem para depurar esse tipo de problema é instrumentar o programa para aplicar as regras que não são impostas pelo sistema normal de tempo de execução.
Uma ferramenta para fazer isso ao procurar por problemas com o acesso à memória é valgrind ( man valgrind ).

    
por Volker Siegel 14.10.2014 / 11:01