|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.09.2011, 11:59 | #1 |
Форумчанин
Регистрация: 30.07.2009
Сообщений: 105
|
Список. Ошибка удаления
Здравствуйте. Разбираюсь впервые с линейным списком. Не выходит сделать никак удаление и изменение определенной записи. Ошибка в последней процедуре.
Код:
|
08.09.2011, 12:17 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Код:
|
08.09.2011, 12:18 | #3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) нет начальной иницилизации head := nil;
2) нет проверки при удалении, что список не пуст. 3) нет проверки на то, что перебор записей успешно завершён. ну, если m введёте БОЛЬШЕ, чем записей в списке. 4) поясните, не смог вникнуть в суть кода: Код:
p.s. программку не запускал. все выводы чисто умозрительные. если что-то проглядел - сорри... p.p.s. Отладка в любом случае спасёт отца русской демократии - ставьте точки останова и проходите в пошаговом режиме, следя за указателями и за тем, куда они показывают... Цитата:
При чём здесь наследование? При чём здесь форма?! Dispose(Указатель) - освободить память, выделенную под структуру... Последний раз редактировалось Serge_Bliznykov; 08.09.2011 в 12:23. |
|
08.09.2011, 12:20 | #4 |
Форумчанин
Регистрация: 30.07.2009
Сообщений: 105
|
Нда, здесь немного намудрил.
з.ы. Иногда удаляет, но очень странно. удаляет не всю строку, а какой-то элемент в строке. Так вообще возможно? Последний раз редактировалось pobedin; 08.09.2011 в 12:26. |
08.09.2011, 12:40 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
начните с иницилизации head. и учтите, что когда Вы освобождаете память, занятую под запись, эта память только помечается в куче как свободная, но содержимое остаётся доступным (некоторое время, конечно). Но это говорит прежде всего о том, что Вы (как программист) неправильно работаете с указателями и памятью! |
|
08.09.2011, 13:01 | #6 |
Форумчанин
Регистрация: 30.07.2009
Сообщений: 105
|
сделал по-другому, с проверкой. как задать del какое-нибудь значение чтобы запись сравнивалась и удалялась? у меня всегда не находит удаляемую запись.
Код:
|
08.09.2011, 13:17 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Вы, надеюсь, шутите?
ну если Вы описали del : TPList; то откуда там возьмётся значение (да ещё не просто значение, а значение равное указателю на какую-то запись из списка!)?!!! ответ - ниоткуда! Я бы предложил Вам всё-таки вернуться к начальному варианту: удалять запись по её порядковому номеру. Тогда перебираете записи до нужного номера. Нашли нужную запись - удалили. Если указали номер больше, чем есть записей в списке - сообщение о невозможности удаления и выход. |
08.09.2011, 13:19 | #8 |
Форумчанин
Регистрация: 30.07.2009
Сообщений: 105
|
понятно. спасибо.
|
08.09.2011, 13:28 | #9 |
Форумчанин
Регистрация: 30.07.2009
Сообщений: 105
|
Рабочий вариант.
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++(удаления узла) | Xaceo | Помощь студентам | 1 | 28.03.2011 18:05 |
список (в чем ошибка ?) | rowlin | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 17.12.2010 21:21 |
Ошибка в ленточной форме зависемый список | vlad-minsk | Microsoft Office Access | 3 | 18.10.2010 12:18 |
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание | Zigfried | Помощь студентам | 2 | 04.10.2010 20:29 |
Защита от удаления | Михаил Юрьевич | Общие вопросы Delphi | 2 | 22.01.2010 22:48 |