powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не правильно освобождаю переменную?
16 сообщений из 16, страница 1 из 1
Не правильно освобождаю переменную?
    #39479239
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я создал глобальный массив картинок:
Код: pascal
1.
var m:array[1..100] of  TImage;



Если надо создать картинку - пробегаю массив в поисках свободного места и создаю там:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
for n:=1 to 100 do
    if m[n]=nil then 
       begin
       m[n].Create(nil);
       ...
       Break;
       end;



Если мне надо удалить, делаю просто:
Код: pascal
1.
if .... then m[n].Free;



Но наверно я делаю что-то не так при удалении, так как удаляемый элемент не становится после удаления равным nil. Если посмотреть в отладчике, то в массиве после .Free элемент по прежнему имеет указатель. Ну скажем:
Код: pascal
1.
m = ($9FF01C, nil, nil, nil, ...



Значит для правильного удаления надо сделать:
Код: pascal
1.
2.
m[n].Free;
m[n]:=nil;



или можно это как-то сделать одной строкой?
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479241
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free не обнуляет саму ссылку на бывший объект.

Одной строкой можно:

Код: pascal
1.
FreeAndNil(m[n]);
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479260
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Действительно теперь всё работает...
А как можно проверить ссылка на существующий объект или на удалённый?
В других языках есть взякие isNull(), is_assigned() чтобы проверить...
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479261
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if Assigned(XXX) then
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479265
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyА как можно проверить ссылка на существующий объект или на удалённый?


Никак. Ссылка на удаленный объект ничем не отличается от ссылки на неудаленный. Уже посоветовали FreeAndNil
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479283
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSky, судя по тому, как ты создаешь объекты, тебе проверки не очень помогут)
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479289
InterSky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rif Assigned(XXX) then
Хм... Я нажал Ctrl+Пробел начал писать Assi... и мне показало что есть только такая процедура, по этому даже не стал проверять...


Но если нажать F1 на уже написанном Assigned - тогда действительно показывает описание функции... Но она в действительности проверяет только на nil, и после простого m[1].Free продолжает сообщать что элемент объявлен.

Всем спасибо, сделал через FreeAndNil
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479291
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyVizit0rif Assigned(XXX) then
Хм... Я нажал Ctrl+Пробел начал писать Assi... и мне показало что есть только такая процедура, по этому даже не стал проверять...


Но если нажать F1 на уже написанном Assigned - тогда действительно показывает описание функции... Но она в действительности проверяет только на nil, и после простого m[1].Free продолжает сообщать что элемент объявлен.

Всем спасибо, сделал через FreeAndNil

ну ты спрашивал за синтаксис - я и написал.
Так-то оно да, для просто освобожденных объектов не сработает.
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479319
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chInterSky, судя по тому, как ты создаешь объекты, тебе проверки не очень помогут)
InterSky,
Код: pascal
1.
m[n] := TImage.Create(nil);
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479363
almswiss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
InterSky,

Не по Фен-Шую. Открой для себя TList.
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479378
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
almswissОткрой для себя TList.
а там и до дженериков рукой подать :)
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479389
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m: TArrayEx<TImage>;

;)
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479394
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Неправильно". :(
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479398
Фотография DetSimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
almswiss, тогдауш TObjectList.
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479499
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TObjectList<TMyClass>

))
...
Рейтинг: 0 / 0
Не правильно освобождаю переменную?
    #39479509
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, а у вас реально такой код?
InterSky
Код: pascal
1.
2.
3.
4.
5.
6.
7.
for n:=1 to 100 do
    if m[n]=nil then 
       begin
       m[n].Create(nil);
       ...
       Break;
       end;


или на самом деле там
Код: pascal
1.
       m[n] := TImage.Create(nil);


?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не правильно освобождаю переменную?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]