1.НА КАЖДУЮ ОПЕРАЦИЮ NEW ДОЛЖНА БЫТЬ СООТВЕТСТВУЮЩАЯ ОПЕРАЦИЯ DELETE.
У вас явно не хватает delete в разных местах.
2.Использовать двумерные массивы так как вы их используете ... ну это извращение какое-то. Сейчас именно так учат? Я понимаю, что удобно делать [i][j] ... но есть же адресная арифтметика, разъименование. И можно легко перейти от указателя на двумерный массив, к указателю на одномерный и использовать индексацию на одномерном массиве.
3.Не нужно выделять память на каждой итерации цикла - достаточно выделить в самом начале массив максимального размера, а дальше использовать его внутри цикла на всех итерациях.
4.Обычно как раз рекурсия более прожорлива к памяти (да и к ЦПУ), чем итерационный метод, т.к. рекурсией съедается стек и если большая вложенность, то стек может кончится.
PS: про ошибку памяти: запустите программу под отладчиком, она прервется, когда произойдет ошибка, в отладчике сможете перейти в последнюю вашу функцию (по стеку вызовов) и посмотреть где-что не так (я надеюсь вы не думаете, что ошибка действительно в lineTo).