Free для array... TMenuItem

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Free для array... TMenuItem

Сообщение vitaly_l » 24.03.2012 21:48:26

var
menu: array of TMenuItem;

begin
SetLength(menu,2);
menu[1] := TMenuItem.Create(MainMenu);
...
MainMenu.Items[0].Add(menu[1]);
:?: Вопрос: как сделать menu[1].free; ??????????? <=== (в таком виде выдаёт ошибку)
end;
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Free для array... TMenuItem

Сообщение SSerge » 26.03.2012 07:53:11

vitaly_l писал(а):Вопрос: как сделать menu[1].free; ??????????? <=== (в таком виде выдаёт ошибку)
end;


Какую ошибку выдаёт? Во время компиляции или во время исполнения?

Вообще то нельзя так делать.

Возможно ошибка номер раз:

Код: Выделить всё
SetLength(menu,2);
menu[1] := TMenuItem.Create(MainMenu);


Если пользуетесь dynamic arrays (зачем, кстати? Их не зря нету в стандарте языка, это вброс со стороны C/C++), так строго помните, что в таких массивах отсчет элементов слава богу ведется от нуля.


Скорее всего ошибка номер два
Вы передаете вот тут:

Код: Выделить всё
MainMenu.Items[0].Add(menu[1]);


А следовательно, дальнейшее поведение указателя menu[1] зависит от списка-хозяина. В большинстве списков, связанных с визуальщиной, хозяин самостоятельно освобождает элемент списка. Ну, соответственно, сразу после того, как вы передали указатель в MainMenu, правила хорошего тона требуют забыть о нем, как о страшном сне. Использование этого указателя как либо иначе, чем MainMenu.Items[] должно рано или поздно приводить к трудновыяснимым ошибкам.

p/s. Вы заметили, что никто уже старается не обращать внимания на ваши вопросы, поскольку обсуждение обычно превращается в поток сознания? :D
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Free для array... TMenuItem

Сообщение vitaly_l » 26.03.2012 09:21:21

SSerge писал(а):обсуждение обычно превращается в поток сознания

Я выяснял то, что мне нужно... и выяснил... Теперь попытаюсь выяснить, как это работает, т.к. из FatELF итп - можно сделать требуемый мне инсталлятор (программу, увы, на "этом" делать нельзя :cry: ).
SSerge писал(а):А следовательно, дальнейшее поведение указателя menu[1] зависит от списка-хозяина. В большинстве списков, связанных с визуальщиной, хозяин самостоятельно освобождает элемент списка.

Единичку я просто в примере указал, там вместо единички стоит var i : byte; Если я правильно понимаю ему не нужно делать free??? и всё будет хорошо. Если ответ ДА, то вопрос закрыт. Т.к. сбой происходит именно при команде free/

PS: спасибо Вам за ответы - они очень помогают, не ругайтесь я постараюсь поменьше философствовать и больше не танцевать А-ДЖИГУ в интернете...
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru