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
).