![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с 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