Как применить динамическую память для хранения соразмерного количества символов с ввода?
Я так понял что инициализацию динамического массива надо делать внутри цикла и освобождать память здесь же. 
Нужно сначала выделить буфер, а потом войти в цикл и писать в него посимвольно. Если он переполняется, то, не выходя из цикла, нужно его увеличить (выделить новый, скопировать данные, освободить старый, поставить новый на место старого).
А с чего бы его принимать?
У вас выделяется динамическая память размером в один байт.
Потом, начиная с этого адреса, впихивается весь ввод.
Уже на втором символе программа просто обязана упасть. 
Причем даже при вводе длиной в один символ этим вторым будет завершающий ноль.
Даже в задании написано про перевыделение памяти - какого, собственно?