![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Vaz007 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Доброй ночи.Проблема в удалении двунаправленного списка.
Вот список:
А вот реализация функции очистки:
Вот программа:
Все хорошо работает , пока не пытаюсь очистить список( IsNumber(n) - ввод кол-ва элементов и проверка на число;Make_Double_List(n,&A_Head,A.Prev) - создание списка;Print_Double_List(A_Head) - вывод на экран) Вылетает ошибка: Необработанное исключение в "0x77b315de" в "Spisok.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefeee". Подскажите пожалуйста, как исправить ? |
||||||
|
|||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Функция очистки списка написана хоть и своеобразно, рекурсивно, но правильно. Иное дело - создание списка. Судя по наличию такого кода: и приходит понимание, что список создан кривовато... А уж печать списка после его очистки и вовсе нонсенс, так как память под A_Head уже освобождена (и, судя по значению указателя 0xfeeefeee, ещё и переинициализирована заботливым delete). Может, программа рушится именно в последнем Print_Double_List, а не в Delete_Double_List? Как насчёт навыков работы с отладчиком? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Навык работы с отладчиком есть, да вы правы все именно так , вылетает после вывода)))Спасибо большое. И можно попросить показать на моем примере как лучше создать список ,почему он создан кривовато?
Вот код функции создания:
|
|||
|
||||
baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Vaz007, дело не в Make_Double_List(), а в ёё использовании:
в качестве предыдущего передается A.Prev. а что насчет самого A, он повис? Добавлено через 5 минут и 26 секунд кстати, гораздо удобнее не передавать адреса, а использовать возвращаемое значение. заодно разнести все по функциям (одна задача - одна функция)
Добавлено через 10 минут и 27 секунд думаю нерекурсивная версия Make_Double_List() будет не менее понятна ![]()
|
||||||
|
|||||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Скажите пожалуйста ,как правильно создать список без рекурсии?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
погляди выше, я же написал
|
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Ой простите, спасибо большое, проблема решена.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |