CString использует выделение кучи для строкового буфера, поэтому фактический предел длины строки зависит от ряда условий и составляет несколько сотен мегабайт.
Как правило, каждый раз, когда строке требуется увеличить свой буфер, она выделяет новый буфер больше, чем предыдущий - есть стратегия для определения нового размера буфера. В зависимости от фактического объема доступной памяти в системе, это перераспределение может завершиться неудачно или успешно. Если это не помогло, у вас есть очень мало вариантов того, что вы можете сделать - обычно лучше всего перезапустить программу.
Для решаемой задачи - работы с COM-портом - вы можете использовать MFC :: CArray, который очень удобно использовать в качестве массива переменного размера. Вы также можете использовать std :: vector для того же.