new_line[i] = a[i];
В общем случае индексы новой и старой строк не совпадают и возможен выход за пределы массива new_line.
PS. Для C++ настоятельно рекомендуется использовать std::string. Сейчас у вас код в стиле Си.
PPS. delete_punctuatuion в вашем примере должна возвращать char*.