Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с TObjectList [D6, D7, WinXP]


TW ©   (2005-06-25 14:24:00) 

Можете объяснить почему происходить ошибка "End of Bound(3)" припопытке удаления из листа данных если лист был создан так:
MyList:=TObjectList.Create(True);
.......
for i:=0 to MyList.Count-1 do
MyList.Delete(i);
Первые 2 цикла проходят нормально!


boalse   (2005-06-29 06:09:00) [1]

Допустим, изначально MyList.Count=10, тогда, встречая строчку:
for i:=0 to MyList.Count-1 do
Цикл выполняется ровно 10 раз, не больше не меньше. Да, значение Count корректируется, происходит переиндексация, но ведь верхняя граница списка уменьшается от 9 до 0, а цикл выполнится ровно 10 раз, поэтому неминуемо произойдёт обращение к несуществующему элементу. Предлагаю так:
I:=0
while MyList.Count>0 do delete(0);

Но clear лучше.


Defunct   (2005-06-29 04:56:00) [2]

> Alexander Panov

разбираю по словам ;>

>> В первом же цикле
В сабжевом вопросе цикл был всего один.

>>индексация корректируется
Индексация элементов в TObjectList корректируется автоматически методом delete (который используется в этом первоми последнемцикле)

>>см. метод delete TList.
Потому что метод Delete в TObjectList наследуется без изменений от TList.

помоему там было все довольно связно.


Alexander Panov   (2005-06-26 12:18:00) [3]

Defunct ©   (26.06.05 6:16) [9]

Твое высказываниее абсолютно непонятно.

Вот это:
Defunct ©   (25.06.05 16:44) [4]
Рябята вы о чем? В первом же цикле индексация корректируется. см. метод delete TList.


Какая индексация корректируется? Как с этим связан метод Delete?

Можно более связно свои мысли выражать?


Defunct   (2005-06-26 06:16:00) [4]

> Alexander Panov

А то не видно.
О том, что слово цикл здесь было неуместно. См. сабжевый вопрос, может попробуешь там найти 2 или тем более 3 "цикла".


default   (2005-06-25 20:11:00) [5]

хотя [1] быстрее будет


default   (2005-06-25 20:10:00) [6]

for i:=0 to MyList.Count-1 do
MyList.Delete( 0);


Alexander Panov   (2005-06-25 20:05:00) [7]

Defunct ©   (25.06.05 16:44) [4]
В первом же цикле индексация корректируется


Это о чем?


Reindeer Moss Eater   (2005-06-25 17:42:00) [8]

Можете объяснить почему происходить ошибка "End of Bound(3)"

Итого, было три успешных итерации.
i=0,i=1,i=2.
При i=3 возникла ошибка.


Defunct   (2005-06-25 16:44:00) [9]

>> Первые 2 цикла проходят нормально!
> Не два, а три цикла.

Рябята вы о чем? В первом же цикле индексация корректируется. см. метод delete TList.


Reindeer Moss Eater   (2005-06-25 14:33:00) [10]

Первые 2 цикла проходят нормально!
Не два, а три цикла.
А на четвертом индексная переменная цикла выходит за границы списка.


Reindeer Moss Eater   (2005-06-25 14:30:00) [11]

MyList.Clear;


Гаврила   (2005-06-25 14:28:00) [12]

for i:=MyList.Count-1 downto0 do


Наверх

Титульная страница Поиск, карта сайта Написать письмо