Esse é um problema de implementação do código, não de linguagem. Segmentation fault é tentar acessar ou modificar uma área da memória RAM de uma forma que não é permitida, como tentar usar um espaço de memória reservada para outro programa ou tentar escrever em uma área que é somente para leitura, não tem relação com a forma como a linguagem foi construída.
O script em C rodou sem erros, simplesmente por não ter o mesmo erro que o seu script para Python, mas ele é muito mais sucetível de ter segmentation faults, pois você está manualmente pegando e liberando memória do computador.
A versão padrão do Python usa partes em C para as tarefas que requerem mais desempenho e o interpretador do Python roda em C, tanto que é chamado de CPython, então não faz sentido fazer essa comparação entre C e Python, como se fossem coisas completamente diferentes, quando na verdade têm muito em comum.
Eu suspeito que o problema esteja relacionado ao fato de que você não está usando generators e está lendo todo conteúdo do arquivo -> guardando tudo na memória -> só então o conteúdo guardado na memória é processado. Com um generator: lê uma linha do arquivo -> armazena a linha na memória -> dado armazenado é processado -> memória é liberada. Então é possível ler uma quantidade infinita de dados sem estar limitado pela quantidade de memória disponível.