Главная страница
    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.009 c
14-87123
Deniska
2003-01-09 12:55
2003.01.27
Rave


1-86783
Каспер
2003-01-18 07:25
2003.01.27
{$i file} как грамотно пользоваться чтоб не возникал СПЕЦ ВОПРО


1-86762
Kurt_
2003-01-17 16:20
2003.01.27
Тут торможу слегка, подскажите люди как открыть фал для записи чт


1-86769
BALU1111
2003-01-15 12:33
2003.01.27
Координаты корсора мыши


14-87073
Карлсон
2003-01-08 13:18
2003.01.27
помогите перевести в pascal!





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