![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение объектов [D6, WinXP]
Smok_er © (2003-01-13 01:39:00)Мастера! Создаю TMenuItem и добавляю в массив след. образом:
Array[1] := TMenuItem.Create(Self);
.... //изменение свойств
А как освободить память?
Array[1].Free выдает исключение "Invalid pointer operation"
Anatoly Podgoretsky (2003-01-13 11:20:00) [21]А что у тебя с элементами 0 и 2..9, когда и как они заполняются.
smok_er (2003-01-13 11:18:00) [22]Извиняюсь за огрызки...
Просто думал, что весь код приводить нет смысла.
есть 2 формы: Form1 (MDI form) и Form2 (MDI child)
Декларация:
Form1:
Array1: array [0..9] of TMenuItem;
При определенных условиях (например по нажатию на какую-то кнопку) в Form2 произвожу след. действия:
Form1.array[1] := TMenuItem.Create(self)
Form1.array[1].caption := "1";
Form1.array[1].hint := "1 hint";
Form1.array[1].onclick := Form1.onmenuitemclick;
Form1.MainMenu1.items.Add(Form1.array[1]);
Таким образом получается, что объект я создаю в одной форме, а уничтожаю в другой по такому принципу:
for i:=0 to 9 do
if array1[i] <> nil then array1[i].Free;
Anatoly Podgoretsky (2003-01-13 10:38:00) [23]Не знаю, может у него и правильно, может действительно хочет Array[1]
В общем надо привести достаточно кода, а не эти огрызки
Думкин (2003-01-13 10:32:00) [24]:-)
Я сначала прочитал "в цирке".
Delirium^.Tremens (2003-01-13 10:29:00) [25]Думкин (13.01.03 10:27)
> Только что попробовал - не грохается. Или это шутка?
Надо долго пробовать, желательно в цикле :-)
Думкин (2003-01-13 10:27:00) [26]
> Anatoly Podgoretsky © (13.01.03 10:20)
> А ты сделай как у него a[1].Free; и у тебя тоже грохнется.
Только что попробовал - не грохается. Или это шутка?
smok_er (2003-01-13 10:24:00) [27]Блин, забыл сказать.
У меня создается в одной форме, а грохается в другой.
Может из-за этого? Ведь в массиве же всего указатель на объект...
Anatoly Podgoretsky (2003-01-13 10:20:00) [28]А ты сделай как у него a[1].Free; и у тебя тоже грохнется.
MBo (2003-01-13 10:13:00) [29]a:array[0..9] of tmenuitem;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 9 do begin
a[i]:=TMenuitem.create(self);
a[i].Caption:=IntTostr(i);
MainMenu1.Items.Add(a[i]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 9 do
a[i].Free;
end;
ничего не виснет
smok_er (2003-01-13 10:01:00) [30]Array1: Array [0..9] of TMenuItem
Думкин (13.01.03 06:26)
self когда грохается - грохает и Array[1].
Self грохнется не скоро :(
Думкин (2003-01-13 10:00:00) [31]Тут не только как объявлен - тут где его пытаются убить.
Юрий Зотов (2003-01-13 09:58:00) [32]Как объявлен Array?
Думкин (2003-01-13 06:26:00) [33]self когда грохается - грохает и Array[1].