Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
ВнизДинамические объекты Найти похожие ветки
← →
Digitman (2002-01-15 11:50) [18]Где у тебя код инициализации глобального массива ButtonArray ?
Перед первым использованием все его элементы д.б. сброшены в nil.
AV возникает у тебя при выполнении строчки
if Assigned(ButtonArray[i]) then ButtonArray[i].Free;
потому как массив, скорее всего, у тебя распределен статически, а компилятор не отвечает за инициализацию стат.массивов.
Ты же , видимо, ошибочно предполагаешь, что при первом выполнении проверки Assigned(ButtonArray[i]) она обязательно даст False, поскольку кнопок на этот момент ты никаких еще не создавал (и, соответственно, Free не будет выполняться).
Но Free может в какой-то момент и выполнится, потому что содержимое явно неинициализированного стат.распр.массива попросту неопределено (нет никакой гарантии, что все его элементы - nil)
Правильней (и красивей, imho) надо бы "нарисовать" так :
код предв.инициализации массива (его можно разместить, к примеру, в разделе иниц-ции модуля формы) :
for i := Low(ButtonArray) to High(ButtonArray) do
ButtonArray[i]:= nil;
и тогда цикл гарантированного разрушения потенциально созданных объектов в массиве будет выглядеть так:
if DM.EAnswerQuery.State = dsBrowse then
for i := 1 to AnswNum do
// уничтожить обьъект, если он на этот момент существует,
// и "убрать за собой мусор" во избежание последующих AV,
FreeAndNil(ButtonArray[i]);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.004 c