Вниз
Скачать: CL | DM;

Работа с TObjectList   Найти похожие ветки 

← →
TW   (2005-06-25 14:24) [0]

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


← →
Гаврила ©   (2005-06-25 14:28) [1]

for i:=MyList.Count-1 downto 0 do


← →
Reindeer Moss Eater ©   (2005-06-25 14:30) [2]

MyList.Clear;


← →
Reindeer Moss Eater ©   (2005-06-25 14:33) [3]

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


← →
Defunct ©   (2005-06-25 16:44) [4]

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

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


← →
Reindeer Moss Eater ©   (2005-06-25 17:42) [5]

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

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


← →
Alexander Panov ©   (2005-06-25 20:05) [6]

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


Это о чем?


← →
default ©   (2005-06-25 20:10) [7]

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


← →
default ©   (2005-06-25 20:11) [8]

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


← →
Defunct ©   (2005-06-26 06:16) [9]

> Alexander Panov

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


← →
Alexander Panov ©   (2005-06-26 12:18) [10]

Defunct ©   (26.06.05 6:16) [9]

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

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


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

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


← →
Defunct ©   (2005-06-29 04:56) [11]

> Alexander Panov

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

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

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

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

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


← →
boalse ©   (2005-06-29 06:09) [12]

Допустим, изначально 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 лучше.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
1-1119693133
grol
2005-06-25 13:52
2005.07.18
Кнопка-компонент из 3 картинок (image ей)?


14-1119429983
timotei
2005-06-22 12:46
2005.07.18
Memory Spy


14-1119344907
Иксик
2005-06-21 13:08
2005.07.18
Оранжевые в Баку


4-1116610718
seregka
2005-05-20 21:38
2005.07.18
Динамическое копирование информации в Richedit


11-1103024613
Роман
2004-12-14 14:43
2005.07.18
Active X




   Наверх