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

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

Освобождение объектов [D6, WinXP]


Страницы:   1 2

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].


Страницы:   1 2

Наверх

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