|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.10.2010, 23:57 | #1 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
Связанный список на СИ
Доброго времени суток! Разбираюсь со связанными списками. Написал простой код, который должен создавать простой связанный список, в котором будут храниться имена вводимые пользователем. После окончания ввода, список выводиться на экран. При выполнении моего кода, весь список , заполняется тем именем, котрое было введено последним. Т.е. если я вводил три имени, то выводятся три одинаковые последние. Подскажите где ошибка? Только начал работать со списками, видно чего-то не допонимаю. Выкладываю свой код
Код:
|
15.10.2010, 00:26 | #2 |
Пользователь
Регистрация: 23.08.2010
Сообщений: 98
|
В программе каждый элемент списка хранит в поле name указатель на буфер b. Естественно, что после окончания ввода в нем остается последнее введенное значение.
Чтобы исправить, нужно вместо Код:
Код:
Последний раз редактировалось sergey.d; 15.10.2010 в 00:35. |
15.10.2010, 02:46 | #3 | |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
Цитата:
И последний вопрос, когда я должен освобождать память, если я правильно понимаю, только после того, как список будет распечатан, в самом конце программы ? Т.е. мне нужно освободить список в цикле, узел за узлом, с помощью функции free, или достаточно free передать указатель на начало списка? А как поступать с той памятью что выделялась для копии строки из массива b, и на которую ссылался элемент структуры name. Как и когда ее высвобождать? Блогадарю. |
|
15.10.2010, 10:14 | #4 | |||
Пользователь
Регистрация: 23.08.2010
Сообщений: 98
|
Цитата:
Цитата:
Цитата:
Маленький нюанс: в принципе, в данном конкретном случае неосвобождение памяти ни к чему страшному не приведет -- большинство ОС "почистят мусор", отставшийся после завершения программы. Но привыкать думать о освобождении памяти необходимо сразу, иначе в более-менее крупном проекте неизбежно возникнут переполнения и утечки памяти. Да и преподаватель наверняка обратит внимание на это уже сейчас |
|||
15.10.2010, 14:45 | #5 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
Благодарю за помощь, все понял. Преподователя к сожалению у меня нет, но отрадно, что есть сообщество готовое помогать. За что благодарен вам и этому форуму.
|
18.10.2010, 04:53 | #6 |
Пользователь
Регистрация: 07.06.2010
Сообщений: 75
|
Я написал следующую функцию для очистки памяти, хотел бы знать на сколько она корректна? И если я правильно понимаю, при печати списка после освобождения памяти, могут отображаться наборы неких символов, это то что попало в эту память уже после освобождения?
Код:
|
18.10.2010, 08:49 | #7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Код:
Код:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Связанный список (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 |