![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте ) Вопрос вероятно глупый, и возможно уже задавался (если так, то извиняюсь, поиск юзал, не помог)... Заклинило собственно вот на чем:
Пишу класс: Цитата:
............................................... Цитата:
............................................... Создаю оба объекта и кнопки в них Цитата:
Получаю Invalid Pointer Operation в конце выполнения программы ( при уничтожении объекта а (именно а, а не а.Button)). Кто знает, куда делся указатель на него? P.s. Если запускать деструктор ручками, то деструктор кнопок выполняется, а деструктор Объекта а ругается. Если не делать Create для кнопок, то деструкторы выполняются без ошибок Последний раз редактировалось KACAH, 07.05.2009 в 21:17. |
#2
|
||||
|
||||
![]() Где теги???
и по теме: Код:
b.button1:=TButton.Create(a); Код:
b.button1:=TButton.Create(b); Да, точно. Ты ведь удаляешь (в таком порядке, я подозреваю) 1. a.button 2. a 3. b.button 4. b поскольку b.button создан с владельцем a, то он и удалится вместе с ним. После чего ты b.button (уже удалённый) пытаешься удалить снова. На что он, собственно, и ругается. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 07.05.2009 в 21:09. |
#3
|
|||
|
|||
![]() 1) Теги исправил
2) Там действительно была описка, но сути это не меняет, эта проблема у меня возникла не на этой программе, эту я написал для упрощения описания проблемы --- Исправил в первом топике тоже, чтобы не путать людей 3) Ругается он не на объект b, а на объект а, после исправления продолжает ругаться 4) Удаляю я в порядке 1. a.Destroy;. Уже на этом вылетает ошибка или в таком: 1. a.Button1.Destroy; 2. a.Destroy; -- Ошибка Последний раз редактировалось KACAH, 07.05.2009 в 21:18. |
#4
|
||||
|
||||
![]() Сейчас, буду думать... Нарежу исходник похожего формата... и попробую тупо создать-удалить...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
||||
|
||||
![]() Чёто меня заклинило... объекты вроде не через Destroy удалять надо, а через Free! Попробуй, должно работать...
Если не заработает, слей лучше свой исходник, я сам с ним поработаю... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
![]() Free - процедура
Destroy - деструктор Вывод: из процедуры Free вызывается деструктор Destroy, и именно он занимается очисткой памяти, а не сама процедура. Насколько я понимаю, в Дельфях объекты можно вообще не удалять, этим услужливо займется встроенная часть Дельфей (а скорее Винды) (условно "Менеджер освобождения памяти" ) после завершения работы приложения Код прилагается: Последний раз редактировалось KACAH, 07.05.2009 в 21:47. |