|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
||||||
Реализация своей функции getline12.10.2015, 09:08. Показов 23952. Ответов 57
Метки нет (Все метки)
Здравствуйте! Не могу решить задачку.
Постановка: Реализуйте функцию getline, которая считывает поток ввода посимвольно, пока не достигнет конца потока или не встретит символ переноса строки ('\n'), и возвращает C-style строку с прочитанными символами. Обратите внимание, что так как размер ввода заранее неизвестен, то вам нужно будет перевыделять память в процессе чтения, если в потоке ввода оказалось больше символов, чем вы ожидали. Память, возвращенная из функции будет освобождена оператором delete[]. Символ переноса строки ('\n') добавлять в строку не нужно, но не забудьте, что в конце C-style строки должен быть завершающий нулевой символ. Мой код:
В чем ошибка ? Консоль зависает после перехода на новую строку.
0
|
||||||
| 12.10.2015, 09:08 | |
|
Ответы с готовыми решениями:
57
Реализация getline Реализация функций getline Delim в функции getline() |
|
1 / 1 / 0
Регистрация: 23.09.2015
Сообщений: 42
|
|||||||
| 19.10.2015, 10:55 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
Вроде бы правильно все. Проверил для 10.
0
|
|||||||
|
21 / 21 / 20
Регистрация: 07.02.2016
Сообщений: 87
|
||||||
| 21.06.2016, 15:55 | ||||||
2
|
||||||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
||||||
| 22.05.2017, 02:15 | ||||||
|
Столкнулся со следующей проблемой Failed test #1. Memory limit exceeded
Не понимания из за чего возникает сия ошибка. Код:
0
|
||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
| 22.05.2017, 02:25 | ||||||
|
WeDin, потому что нужно
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
|
| 22.05.2017, 02:30 | |
|
TRam_, i там на 1 больше длинны массива.
Но на всякий случай проверил. Ошибка не изменилась.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||
| 22.05.2017, 03:05 | |||||||
Добавлено через 1 минуту И я б на односвязный список это перевёл.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
||||||
| 22.05.2017, 03:26 | ||||||
|
Верно подправил на
Но ошибка так и осталась Failed test #1. Memory limit exceeded. Но код из этого поста: Реализация своей функции getline не падает.
0
|
||||||
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
| 22.05.2017, 03:54 | |
|
Если память выделяете с помощью malloc, то удалять надо с помощью delete[], а не free
Для result_str пямять выделена и не освобождена
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 22.05.2017, 04:09 | ||
|
1
|
||
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
| 22.05.2017, 04:14 | |
|
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 22.05.2017, 04:28 | |
|
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
| 22.05.2017, 05:42 | ||||||
|
Вариант с самописным списком
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
||||||||||||||||
| 22.05.2017, 15:26 | ||||||||||||||||
|
ValeryS, да неоднозначно. Поменял.
TRam_, к сожалению, я не обратил на часть условия: пока не достигнет конца потока или не встретит символ переноса строки ('\n') Поэтому из за отсутствия проверки конца потока, код не проходил тестирование. Написал два верных решения задачи в стиле C-style и C++. C++:
Вопрос почему код C-style:
Failed test #1. Runtime error: terminate called after throwing an instance of 'std::logic_error' what(): You didn't allocate dynamic mamory Aborted (core dumped) Как я понимаю и в том и в этом случает память должна выделяться в хипе. Но похоже память выделяется в стеке.
0
|
||||||||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 22.05.2017, 15:37 | ||
|
WeDin, нет, не из-за этого. Из-за того что malloc/realloc требует освобождения памяти через free(), у вас видимо оставался delete[] в коде.
Добавлено через 1 минуту И по условию -
0
|
||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
|
| 22.05.2017, 15:57 | |
|
TRam_, с чем связано требование высвобождение памяти после realloc?
В хипе хранятся актуальные данные, в итоге я на них и возвращаю указатель. Поэтому не совсем понятна логика требующая копировать данные в свежевыделенную память. p.s. В Visual Studio 2015 работает, в g++ стандарт 2003 года нет
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 22.05.2017, 16:14 | |
|
WeDin, логика не в том, что память выделенная new[] это не то же самое, что память, выделенная через alloc(), и это важно не в самой функции, а вне её, где вызывается деструктор для этого выделения. И деструктор delete[] не для всех компиляторов делает то же что free().
1
|
|
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 6
|
|
| 22.05.2017, 16:24 | |
|
TRam_, тогда возникает вопрос как написать так чтобы использовать C-style подход. И код был рабочим.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 22.05.2017, 16:43 | |
|
WeDin, заменить в вызывающей функции delete[] на free().
Или разбивать функцию на две, чтоб в одной части считала длину массива, потом выделялся бы этот массив где-то снаружи, а потом вторая функция собственно его заполняла. Ну нельзя так делать, чтоб массив конструировался как в С, а деструктор к нему применялся от С++.
1
|
|
| 22.05.2017, 16:43 | |
|
Какой правильный вызов у функции getline()? Третий аргумент функции sdt :: getline Отсутствуют экземпляры перегруженной функции getline
Использование функции в своей программе из своей dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|