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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.008 c
4-87219
olden
2002-12-12 13:00
2003.01.27
как запретить комбобоксу реагировать на колесо мыши


7-87159
surkis
2002-11-14 13:01
2003.01.27
Права админа для проги


6-87009
DrOne
2002-11-26 23:50
2003.01.27
О взломе...


14-87053
Лёха2003
2003-01-05 14:51
2003.01.27
Создание ядра ОС


14-87115
Николай Быков
2003-01-06 12:56
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский