![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Insomnia |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
идея задачи в том: что бы произвести со списком различные действия. Проблема в удалении элемента списка по имени. Пробовал различные условия и составление процедуры/ процедур, но что бы полноценно из любого места удалял эл-т не выходит. Как пр: "если ввожу 3 эл-та и удаляю последний - все хорошо. но если следом удаляю 2 то он впринцепи прогоняет и выводит ответ: но вмете с тем и вылетает." . Косяк, я предполагаю, в неккоректных условиях, т.е. выходит за пределы списка.
опишите подробней пожалуйста мои ошибки. P.S. остальные условия работают хорошо, но если заметите недочеты , укажите их, пожалуйста. Прикрепленные файлы ![]() |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: ![]() ![]() ![]() |
Цитата Косяк, я предполагаю, в неккоректных условиях, т.е. выходит за пределы списка. Правильно предполагаешь:Цитата 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 выдает сообщение об утечке памяти, именно из-за этого злосчастного звена. Печать пустого списка. Какое-то сообщение можно написать? Или достаточно молча, ничего не говоря, выйти из процедуры? |
![]() ![]() |
![]() |
Текстовая версия | 13.09.2025 8:45 |