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

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

Access violation


Alexs ©   (2012-03-05 11:43:00) 

есть некая программа после выполнения определенных действий вылетает
Access violetion at address 0040602A in module sm.exe read of address ffffffc4.
через отладчик выхожу вот на эту строку кода
@@haveVMT:
       MOV     EDI,[EDX].vmtDynamicTable
это System.pas самого delphi XE2 как выйти на строку кода в самой программе?
в программе создается много компонентов но все они удаляются таким вот образом
for i := 0 to pScrollBox.ControlCount - 1 do
 begin
   pScrollBox.Controls[0].Free;
 end; // for
destroy ничего не меняет


Ega23   (2012-03-11 13:36:00) [1]


> По моему уничтожает объекты всё-такие Оwner, a не Parent.
>  Вот у нас и получается, что Parent прибил их "таким вот
> образом ", а потом Owner пытается сделать это ещё раз в
> собственном деструкторе


Чё гадать-то, загляни в код.


Anatoly Podgoretsky   (2012-03-06 17:47:00) [2]

> Dimka Maslov  (06.03.2012 17:17:05)  [5]

Визуальные контролы убиваются по parent, они могут не иметь собственника.
Проблемы с удалением по Owner нет, при убиение по Controls он убирается
также и из списка Сomponents


Dimka Maslov   (2012-03-06 17:17:00) [3]

По моему уничтожает объекты всё-такие Оwner, a не Parent. Вот у нас и получается, что Parent прибил их "таким вот образом ", а потом Owner пытается сделать это ещё раз в собственном деструкторе


Ega23   (2012-03-06 15:07:00) [4]


> Во-первых, конкретную ошибку тебе уже показали [1]


Тут вот товарищи поправили, а я и проглядел.
Ошибки-то у автора нет, он нулевой элемент удаляет. Это не оптимально, т.к. ненужный Move много раз делается, но не ошибка.

Мне кажется, что это из-за Controls, а не Components. Надо код создания смотреть.


Ega23   (2012-03-06 13:59:00) [5]


> в программе создается много компонентов но все они удаляются
> таким вот образом
> for i := 0 to pScrollBox.ControlCount - 1 do


Во-первых, конкретную ошибку тебе уже показали [1]
Во-вторых, если компонентыправильно создавать, то и убивать их самому не надо будет, у них механизм самоликвидацией через Owner заложен.
Ты же не пишешь деструктор формы, хотя накидываешь на неё в design-time кучу контролов.


Dimka Maslov   (2012-03-05 12:30:00) [6]

1. Есть такая замечательная весчь - называет Call Stack. Показывает (по мере сил, конечно) всю последовательность вызовов подпрограмм, приведшую к текущему месту.

2. Если контрол был добавлен через InsertControl или через присвоение Parent, то он будет удалён вместе со всеми. Отдельно удалять его не надо.


CRLF   (2012-03-05 12:14:00) [7]

for i := Pred(pScrollBox.ControlCount) downto 0 do
begin
  pScrollBox.Controls[i].Free;
end;


Наверх

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