Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

TListItem.Data - освобождение памяти   Найти похожие ветки 

 
sers   (2003-01-20 09:07) [0]

У меня есть источник данных. Пробегая по источнику данных я заполняю TListView. При этом определенную информацию я привязываю через указатель TListItem.Data. Вот код:

{ Это я очищаю ListView }
lvMessages.Items.Clear;

// Это я получил набор записей
dm.returnRecords(lbForums.ItemIndex+1,
100, 100, 1, 0);
dm.qReturn_n_Records.First;

for i:=1 to 100 do
begin
item:=lvMessages.Items.Add;
new(messPtr);
item.Caption:=IntToStr(i);
messPtr^.message_id:=dm.qReturn_n_Records.FieldByName("message_id").AsInteger;
messPtr^.readed:=dm.qReturn_n_Records.FieldByName("readed").AsInteger;
messPtr^.marked:=dm.qReturn_n_Records.FieldByName("marked").AsInteger;
item.Data:=messPtr;
item.SubItems.Add(dm.qReturn_n_Records.FieldByName("message_name").AsString);
dm.qReturn_n_Records.Next;
end;

Где:

PMessInfo = ^TMessInfo;
TMessInfo = record
message_id : integer;
readed : integer;
marked : integer;
end;

Все это дело происходит при нажатии на какую-то клавишу. Будут ли при удалении Item"ов удаляться привязанные к ним структуры ?

Подозреваю, что нет. Пробую удалять так:

begin
// Удаляем старые messInfo
{ for i:=1 to lvMessages.Items.Count do
begin
item:=lvMessages.Items.Item[i];
messPtr:=item.Data;
freeMem(messPtr);
end;
}

lvMessages.Items.Clear;

То есть перед удалением item"ов пробегаюсь по ним и освобождаю память. При выполнении этого варианта происходит Access Violation.

Где я ошибся и как это делается правильно ?

Заранее благодарю.


 
Думкин   (2003-01-20 09:10) [1]


> for i:=1 to lvMessages.Items.Count do

от 0 до lvMessages.Items.Count-1


 
Наталия   (2003-01-20 09:19) [2]

Или повесь освобождение памяти на ListView.OnDeletion


 
sers   (2003-01-20 09:23) [3]

Благодарю


 
NailS   (2003-01-20 10:12) [4]


> new(messPtr);


> freeMem(messPtr);

Вообще-то некрасиво использовать такие связки функций. Борланд рекомендует New - Dispose GetMem - FreeMem


 
Юрий Зотов   (2003-01-20 10:45) [5]

Сама по себе память, конечно, не освободится, так что Вы делаете правильно. Но если память Вы выделяете через New, то освобождать ее нужно через Dispose, а не через FreeMem.


 
sers   (2003-01-20 11:09) [6]

Еще раз спасибо всем за помощь.



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

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.01 c
7-87156
Format
2002-10-26 22:08
2003.01.27
Вандальные юзеры


1-86833
denisww
2003-01-15 21:37
2003.01.27
Есть обьект на форме допустим GroupBox , я ему установил свойс. D


1-86746
stdnet
2003-01-17 13:02
2003.01.27
прочитай - узнаеш


1-86763
Th
2003-01-16 20:11
2003.01.27
Работа с TScrollBox


14-87093
Дмитрий К.К.
2003-01-08 11:41
2003.01.27
Что это могло бы быть?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский