![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Новичок
Джуниор
Регистрация: 12.07.2011
Сообщений: 12
|
![]()
Тогда как минимум сразу избавься от цикла по n. Лучше сделай примерно так:
while (first != last) { var next = first->next; // запомнили второй элемент delete first; // удалили первый first = next; // теперь второй стал первым } if (first) delete first; //удалили последний элемент Это не готовый код, только общая суть алгоритма. |
![]() |
![]() |
![]() |
#12 |
Новичок
Джуниор
Регистрация: 12.07.2011
Сообщений: 12
|
![]()
Насчёт "не работает". Не работать может по-разному. Ошибку выдает - какую? На какой строчке, в какой операции? Пошаговая отладка - очень хороший инструмент.
|
![]() |
![]() |
![]() |
#13 |
Форумчанин
Регистрация: 06.12.2009
Сообщений: 380
|
![]() |
![]() |
![]() |
![]() |
#14 |
Новичок
Джуниор
Регистрация: 12.07.2011
Сообщений: 12
|
![]()
Немудрено. В visual studio работаешь? Там клавиша F11. В других средах не помню. Брейкпоинт поставь на начало процедуры, заполни свой список тремя элементами, вызови функцию удаления и отслеживай, что за мусор она у тебя попытается удалить.
* Два раза один и тот же указатель удалять нельзя. * Указатель, который ты получил не через new, удалять нельзя. * NULL удалять нельзя (хотя вроде программа не падает, всё равно это плохой стиль) * Произвольный мусорный указатель на не пойми что удалять нельзя. Если дело не в этом, ты меня удивишь. Не научишься дебажиться - программистом не станешь, поверь старому еврею. Последний раз редактировалось Раввин; 12.07.2011 в 13:33. |
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 06.12.2009
Сообщений: 380
|
![]() |
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 06.12.2009
Сообщений: 380
|
![]()
Ошибок больше нет, после удаления массива запускаю ф-цию вывода на экран, но вылазит та же критическая ошибка!
Код:
|
![]() |
![]() |
![]() |
#17 |
Форумчанин
Регистрация: 06.12.2009
Сообщений: 380
|
![]()
Все отлично, разобрался!
Спасибо всем за помощь! |
![]() |
![]() |
![]() |
#18 |
Новичок
Джуниор
Регистрация: 12.07.2011
Сообщений: 12
|
![]()
Не, друг мой, это те, которые вот так сделаны:
pointer = new Class(); Хотя можно назвать и так, "через конструктор объявлены"... Наверное, это оно. По поводу: last->next=NULL; Ты last всё равно удалишь в следующем проходе, можешь не заботиться о поле next, раз оно не используется нигде до удаления. Но тенденция хорошая, лучше переосторожничать, чем недоосторожничать. А вот тут: if( first==last ) delete del; Лучше проверь if (del). first==last при пустом списке вернет true, потому что они оба будут NULL, и ты удалишь пустой указатель, это некрасиво. Плюс к тому же: while( first!=last ) { ... } if( first==last ) delete del; Если ты вышел из цикла, значит, first==last по определению и тебе не надо это перепроверять. А так молодец, что разобрался и заставил работать. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
списки | Inna_L | HTML и CSS | 2 | 11.12.2010 17:34 |
Списки | Хорнет | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 09.06.2010 09:55 |
списки | sergeykl | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 04.08.2009 23:05 |