Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: 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 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-1119559059
NewWonder
2005-06-24 00:37
2005.07.18
Пара вопросов о DLL


1-1120267488
МП
2005-07-02 05:24
2005.07.18
как программно копировать выделенный текст, из другой программы


1-1119785543
serg128
2005-06-26 15:32
2005.07.18
Как вычитывать файл построчно используя TFileStream?


4-1117047851
kat
2005-05-25 23:04
2005.07.18
Использование чужих классов


14-1119873163
_Anton
2005-06-27 15:52
2005.07.18
Динамичаски добавить поле