![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
![]()
Доброго времени суток! Разбираюсь со связанными списками. Написал простой код, который должен создавать простой связанный список, в котором будут храниться имена вводимые пользователем. После окончания ввода, список выводиться на экран. При выполнении моего кода, весь список , заполняется тем именем, котрое было введено последним. Т.е. если я вводил три имени, то выводятся три одинаковые последние. Подскажите где ошибка? Только начал работать со списками, видно чего-то не допонимаю. Выкладываю свой код
Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 23.08.2010
Сообщений: 98
|
![]()
В программе каждый элемент списка хранит в поле name указатель на буфер b. Естественно, что после окончания ввода в нем остается последнее введенное значение.
Чтобы исправить, нужно вместо Код:
Код:
Последний раз редактировалось sergey.d; 15.10.2010 в 00:35. |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
![]() Цитата:
И последний вопрос, когда я должен освобождать память, если я правильно понимаю, только после того, как список будет распечатан, в самом конце программы ? Т.е. мне нужно освободить список в цикле, узел за узлом, с помощью функции free, или достаточно free передать указатель на начало списка? А как поступать с той памятью что выделялась для копии строки из массива b, и на которую ссылался элемент структуры name. Как и когда ее высвобождать? Блогадарю. |
|
![]() |
![]() |
![]() |
#4 | |||
Пользователь
Регистрация: 23.08.2010
Сообщений: 98
|
![]() Цитата:
Цитата:
![]() Цитата:
Маленький нюанс: в принципе, в данном конкретном случае неосвобождение памяти ни к чему страшному не приведет -- большинство ОС "почистят мусор", отставшийся после завершения программы. Но привыкать думать о освобождении памяти необходимо сразу, иначе в более-менее крупном проекте неизбежно возникнут переполнения и утечки памяти. Да и преподаватель наверняка обратит внимание на это уже сейчас ![]() |
|||
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
![]()
Благодарю за помощь, все понял. Преподователя к сожалению у меня нет, но отрадно, что есть сообщество готовое помогать. За что благодарен вам и этому форуму.
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
![]()
Я написал следующую функцию для очистки памяти, хотел бы знать на сколько она корректна? И если я правильно понимаю, при печати списка после освобождения памяти, могут отображаться наборы неких символов, это то что попало в эту память уже после освобождения?
Код:
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]() Код:
Код:
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Связанный список (Linked list). | lnter | Помощь студентам | 0 | 12.04.2010 17:58 |
База данных. Связанный список. | 4uJIaBekTonop | C/C++ Базы данных | 3 | 29.12.2009 10:42 |
Еще один вопрос, связанный с БД | Sweta | Общие вопросы C/C++ | 3 | 09.11.2009 17:10 |
Вопрос связанный с выводом графики | BuT@JL | Мультимедиа в Delphi | 2 | 24.10.2009 12:54 |