Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

Как правильно освободить память Record   Найти похожие ветки 

 
Senti ©   (2006-01-20 21:00) [0]

У меня есть компонент TListView. При добавление нового итема к нему добавляется Значение Data.

type
  PUser  = ^AUser;
  AUser  = record
    nick   : ShortString;
    rights : Byte;
    Id : ShortString;
end;

var User     : PUser;
    clname  : TListItem;

// вырезка из кода добавления итема
clname := ListView1.Items.Add;
clname.Caption:="некий юзер";
New(User);
User^.nick:=name;
User^.rights:=adm;
User^.Id:="123";
clname.data :=User;

// теперь необходимо удалить итем и соответственно удалить данные, относящиеся к нему. Я делаю так:
Dispose(ListView1.Items.Item[i].Data);
ListView1.Items.Item[i].Delete;


// Удаляется ли сама запись в этом случае или удаляется только ссылка на нее ?
Необходимо ли делать Dispose в этом случае или его нужно вызывать по другому ? Или когда удаляется итем автоматом очищаются все данные относящиеся к нему ?

Как правильно очистить память при удаление item ?


 
begin...end ©   (2006-01-20 21:15) [1]

> Senti ©   (20.01.06 21:00)

> Необходимо ли делать Dispose в этом случае

Да.

> Или когда удаляется итем автоматом очищаются все данные
> относящиеся к нему ?

Если имеются в виду данные, на которые указывает Data, то нет.

> Как правильно очистить память при удаление item ?

В данном случае (когда запись не содержит полей, подлежащих финализации) Ваш вариант будет корректным. Если же в записи такие поля (например, длинные строки или динамические массивы) будут, то, если они не будут финализироваться Вами вручную, при вызове Dispose необходимо явно указывать тип:

Dispose(PUser(ListView1.Items[i].Data))


 
Senti ©   (2006-01-20 21:35) [2]

т.е. в моем случае я правильно удаляю данные. т.е. при вызове Dispose(ListView1.Items.Item[i].Data) удаляется и сами данные PUser созданные в системе ?

А вот другая ситуация. Существует некое кол-во созданных экземпляров PUser в системе.
Мне часть необходимо удалить.
Так ли это делается
New(Puser);
Puser:=somePointer;
Dispose(PUser);


Удалиться ли информация из памяти ?
или есть какие либо другие процедуры для очищения ?


 
Senti ©   (2006-01-21 04:17) [3]

ну вот не знает никто ?


 
DesWind ©   (2006-01-21 04:40) [4]


> New(Puser);


Выделяется область памяти и ее адрес записывается в переменную PUser


> Puser:=somePointer;


Переменной PUser присваивается адрес другой области памяти, при этом теряется адрес другой области, выделенной предыдущей строкой.


> Dispose(PUser);

Особождается память по адресу в перемнной PUser.


 
msguns ©   (2006-01-21 09:10) [5]

Правильно делать так:

var
 somePointer: PUser;
  ...
begin
  somePointer := New(Puser);
  ...
  Dispose(somePointer);
  ...
end;


 
Senti ©   (2006-01-23 09:42) [6]

Спасибо большое за помощь !


 
Senti ©   (2006-01-23 09:42) [7]

Спасибо большое за помощь !



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.048 c
4-1133473668
sergey1
2005-12-02 00:47
2006.02.12
как в ListBox e можно сделать переход в директорию


9-1124788941
Fridrih
2005-08-23 13:22
2006.02.12
Обращение к атрибутам класса в DelphiX


1-1137485328
medvedenator
2006-01-17 11:08
2006.02.12
ПОМОГИТЕ!!!!


11-1119419512
midas2k5
2005-06-22 09:51
2006.02.12
StatusBar


2-1138017553
МегаПупс
2006-01-23 14:59
2006.02.12
Directory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский