При таком написании вам потребуется примерно 6 байт памяти для каждого символа в файле.
Каждый символ состоит из двух байтов. У вас есть необработанный ввод, замещенный вывод (в буфере), и вы запрашиваете третью копию, когда у вас заканчивается память.
Если файл закодирован в формате ASCII или ISO-8859-1 (однобайтовая кодировка символов), это означает, что в памяти он будет в шесть раз больше, чем на диске.
Вы можете выделить больше памяти для процесса, но лучшим решением может быть обработка ввода «по потоку» - чтение, сканирование и запись данных без одновременной загрузки их в память.