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

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

Вылет из-за неправильного удаления из TList. [D7]


Страницы:   1 2

Б ©   (2009-01-15 16:13:00) 


Constructor ПУЛИ:
  BulletList.Add(Self);              // Добавляем пулю в список.

Destructor ПУЛИ:                    // Удаляем пулю из списка.
 BulletList.Remove(Self);
 inherited;

OnTimer ГЛОБАЛЬНОГО ТАЙМЕРА:
Var i: word;
begin
 If BulletList.Count > 0 then
    For i:= 0 to BulletList.Count - 1 do
      TBullet(BulletList[i]).Move;


 
  При нажатии на кнопку создаётся пуля.
  В процедуре движения пуля уничтожается в случае выхода за пределы формы.
 
ВОПРОС: При уничтожении пули, программ сразу же вылетает.


Юрий Зотов   (2009-01-15 16:27:00) [21]

> Б   (15.01.09 16:23) [4]

> Если её убрать, программа мигом вылетает.

Такого быть не должно, потому что если BulletList.Count  = 0, то цикл просто ни разу не выполнится и больше ничего не произойдет.

А если такое все же есть, то это значит, что программа содержит ошибку. Очень советую эту строчку все же убрать, а ошибку найти и устранить.


Медвежонок Пятачок   (2009-01-15 16:25:00) [22]

ну вот и ответ на вопрос


Б   (2009-01-15 16:25:00) [23]

> А ты её внутри Bullet.Move убить пытаешься?

Там находится функция, определяющая вышла ли Пуля за пределы формы.
Если Да (True), то она уничтожается.


Медвежонок Пятачок   (2009-01-15 16:25:00) [24]

В процедуре движения пуля уничтожается в случае выхода за пределы формы.


Б   (2009-01-15 16:23:00) [25]

2 Юрий Зотов

Большое Вам спасибо!
Не думал, что из-за цикла так происходит.

> 1. If BulletList.Count > 0 then - эту строку надо просто выкинуть.

Если её убрать, программа мигом вылетает.


Ega23   (2009-01-15 16:20:00) [26]

А ты её внутри Bullet.Move убить пытаешься?


Юрий Зотов   (2009-01-15 16:18:00) [27]

> Б

1. If BulletList.Count > 0 then - эту строку надо просто выкинуть.
2. For i := BulletList.Count - 1 downto 0 do
     TBullet(BulletList[i]).Move;


Б   (2009-01-15 16:15:00) [28]

Начало ---> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1231532495&n=18


Страницы:   1 2

Наверх

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