![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение объектов [D6, WinXP]
Smok_er © (2003-01-13 01:39:00)Мастера! Создаю TMenuItem и добавляю в массив след. образом:
Array[1] := TMenuItem.Create(Self);
.... //изменение свойств
А как освободить память?
Array[1].Free выдает исключение "Invalid pointer operation"
smok_er (2003-01-15 11:59:00) [1]Думкин (15.01.03 11:24)
Звиняюсь - Clear, не заметил.
А ветку смотрел - и вроде как учавствовал.
Так я и удивился. Ведь знаю же, что принимал в ней активное участие :)
Думкин (2003-01-15 11:24:00) [2]Звиняюсь - Clear, не заметил.
А ветку смотрел - и вроде как учавствовал.
smok_er (2003-01-15 11:17:00) [3]Думкин (15.01.03 11:00)
Предыдущий пост не видел, так о чем в этом свете речь шла?
В смысле? Посмотрите ветку с самого первого поста.
Думкин (2003-01-15 11:00:00) [4]Предыдущий пост не видел, так о чем в этом свете речь шла?
Думкин (2003-01-15 10:52:00) [5]Удалится, если ты на него сошлешься.
smok_er (2003-01-15 10:51:00) [6]ОК!
Спасибо!
Anatoly Podgoretsky (2003-01-15 10:21:00) [7]Если Self указан, то компонент удалится автоматически при удалении владельца.
smok_er (2003-01-15 10:05:00) [8]Мастера, в особенности Анатолий!
Бес меня попутал. Я перед уничтожением делал так:
Form1.MainMenu1.items.Clear.
Кстати, вопрос:
Если я создаю это в дочерней форме и при создании в качестве аргумента указываю Self, то удалится ли созданный menuitem на главной форме?
smok_er (2003-01-13 16:13:00) [9]Anatoly Podgoretsky © (13.01.03 15:41)
Ну сколько можно просить, приведи полный код создания элементнов, а не огрызки, которыве вызывают сильное подозрение.
Я дома посмотрю и точно скажу, хотя будет тоже самое с другими названиями переменных и объектов.
--------------------------------------------------------------------------------
gsu © (13.01.03 15:46)
сильное подозрение на убийство пустоты
Нет, я проверял!
gsu (2003-01-13 15:46:00) [10]сильное подозрение на убийство пустоты
Anatoly Podgoretsky (2003-01-13 15:41:00) [11]Ну сколько можно просить, приведи полный код создания элементнов, а не огрызки, которыве вызывают сильное подозрение.
smok_er (2003-01-13 15:34:00) [12]В общем, не буду ходить вокруг да около.
Делаю так, как в IE - история посещений (выплывающий список при нажатии на Back или Forward).
Т.е. мы их добавляем при нажатии на кнопку, при этом ограничивая список только до 10 последних изменений.
Так вот, при нажатии на кнопку надо санчала уничтожить объекты, дабы не засорять и без того малое количество драгоценной памяти.
Вот при уничтожении первого же элемента происходит эта ошибка.
Anatoly Podgoretsky (2003-01-13 14:15:00) [13]В (13.01.03 11:40) ответа нет, идет инициализация отдельного элемента, притом неизвестного. До этого шла инициализация только первого элемента. А вот высбождение всех.
smok_er (2003-01-13 14:01:00) [14]Anatoly Podgoretsky © (13.01.03 11:20)
А что у тебя с элементами 0 и 2..9, когда и как они заполняются.
Ответ здесь:
smok_er (13.01.03 11:40)
Извиняюсь, что не выделил, что это ответ на Ваш пост.
Anatoly Podgoretsky (2003-01-13 13:29:00) [15]Ты не ответил на Anatoly Podgoretsky © (13.01.03 11:20)
smok_er (2003-01-13 13:18:00) [16]Думкин (13.01.03 11:59)
Надо смотреть - я побаловался чуток - все как по маслу.
Ты дома посмотри - завтра опять народ загрузишь. %-)
Да, плохо что сейчас я не дома, не могу проверить :(
Думкин (2003-01-13 11:59:00) [17]Надо смотреть - я побаловался чуток - все как по маслу.
Ты дома посмотри - завтра опять народ загрузишь. %-)
smok_er (2003-01-13 11:42:00) [18]Думкин (13.01.03 11:39)
Проверки на nil не достаточно. Если бы ты делал FreeAndNil - тогда да.
Проблема возникает точно в этом месте? И где у тебя Form2 задействована - в коде не видно. Где уничтожаешь?
Ошибка вылазит не периодически...
Она появляется при первом уничтожении объекта, допустим сразу после создания. При этом Form2 остается не уничтоженной.
smok_er (2003-01-13 11:40:00) [19]Дело в том, что исходники дома, а я сейчас на работе.
Я думаю, это не столь важно, но вот как оно выглядит, с учетом заполнения:
есть 2 формы: Form1 (MDI form) и Form2 (MDI child)
Декларация:
Form1 (Public):
Array1: array [0..9] of TMenuItem;
Counter: Integer;
При определенных условиях (например по нажатию на какую-то кнопку) в Form2 произвожу след. действия:
Form1.array[Form1.Counter] := TMenuItem.Create(self)
Form1.array[Form1.Counter].caption := "1";
Form1.array[Form1.Counter].hint := "1 hint";
Form1.array[Form1.Counter].onclick := Form1.onmenuitemclick;
Form1.MainMenu1.items.Add(Form1.array[Form1.Counter]);
Inc(Form1.Counter);
Таким образом получается, что объект я создаю в одной форме, а уничтожаю в другой по такому принципу:
for i:=0 to 9 do
if array1[i] <> nil then array1[i].Free;
Теперь все один в один. за исключением названий переменных.
Думкин (2003-01-13 11:39:00) [20]Проверки на nil не достаточно. Если бы ты делал FreeAndNil - тогда да.
Проблема возникает точно в этом месте? И где у тебя Form2 задействована - в коде не видно. Где уничтожаешь?