Sigsegv dostajesz dlatego, że rozmiar bufora jest za mały.
Wystarczy go zwiększyć np dwukrotnie i pozbędziesz się tego jednego problemu. Następnym jest twoja funkcja readLine. Czyta ona znak po znaku do EOF ==end of file - koniec pliku. Czyta więc nie jakby sugerowała jej nazwa linię tekstu, ale od razu cały plik [i dlageo rozmaiar bufora jest za mały].
Zgadzam się z @hipcia’em, ale tylko z pierwszym akapitem. Jeszcze jedną magiczną liczbą jest 1000000, występująca w trzech miejscach. Można więc użyć const int rozmiarBufora = 1000000;
i wtedy tylko w jednym miejscu zmieniać wartość tej stałej, np const int rozmiarBufora = 2000000;
, a w innych miejscach używać nazwy tej stałej.
Sposobów rozwiązania zadania jest może nie milion, ale dużo więcej niż tylko jedno poprawne i to Ty jesteś programistą [ewentualnie początkującym] i to twoja decyzja i umiejętności jak rozwiązesz zadanie i oczywiście @hipcia-o podał jeden z możliwych - poprawnych sposobów, ale lepiej użyj swojego - tyle że musisz jeszcze “z nim powalczyć” - poprawić błąd/błędy.