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