![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Insomnia |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
идея задачи в том: что бы произвести со списком различные действия. Проблема в удалении элемента списка по имени. Пробовал различные условия и составление процедуры/ процедур, но что бы полноценно из любого места удалял эл-т не выходит. Как пр: "если ввожу 3 эл-та и удаляю последний - все хорошо. но если следом удаляю 2 то он впринцепи прогоняет и выводит ответ: но вмете с тем и вылетает." . Косяк, я предполагаю, в неккоректных условиях, т.е. выходит за пределы списка.
опишите подробней пожалуйста мои ошибки. P.S. остальные условия работают хорошо, но если заметите недочеты , укажите их, пожалуйста. Прикрепленные файлы ![]() |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Косяк, я предполагаю, в неккоректных условиях, т.е. выходит за пределы списка. Правильно предполагаешь:Цитата if (p^.mName=dName) then ... безоговорочное действие, правда? В P записать Q^.mNext, чего ж проще? А ничего, что этот самый Q^.mNext может быть nil? Значит, и P = nil после отмеченной строки? Стоп, а что ж дальше ты делаешь? Ух ты... Разыменовываешь p... Как интересно, особенно в случае когда p = nil. Программе ничего не остается кроме как вылететь... На самом деле мне не понятно, во-первых, в чем тут преимущество списка с заглавным звеном. Объяснишь? Вот я лично в этом ничего, кроме неудобства (надо сдвигаться на 1 элемент прежде чем начать работать собственно со списком) не вижу. Зачем надо выделять лишнюю память? Во-вторых, даже если с заглавным. К чему 2 ветки if then ... else ... ? Что, вот так: procedure delete_person (var L: PPerson); - это слишком просто? ![]() Дальше, по недочетам: удаление заглавного звена (да и вообще списка) где? При выходе из программы FPC выдает сообщение об утечке памяти, именно из-за этого злосчастного звена. Печать пустого списка. Какое-то сообщение можно написать? Или достаточно молча, ничего не говоря, выйти из процедуры? |
![]() ![]() |
![]() |
Текстовая версия | 21.07.2025 21:06 |