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

Вниз

Удаление переменных из памяти   Найти похожие ветки 

 
catdog ©   (2008-03-17 11:27) [0]

Здравствуйте, товарищи.

Имеется структура, описывающая каждую ветвь в дереве (tkoltreeview):

type
PData = ^TData;
TData = record
 FName: string;
 ver: byte;
end;


При добавлении ветви:
New(Ptr);
Ptr^.FName := FileName;
Ptr^.ver := 0;
tree.TVItemData[item] := Ptr;


При удалении ветви:
PData(treeview1.TVItemData[Item])^.FName := "";
PData(treeview1.TVItemData[Item])^.ver := 0;


Так вот, вопрос в том, как мне уничтожать переменную FName и typeoffile вообще, из памяти? В программе дерево может обновлятся неоднократно, и память необходимо освобождать.

Спасибо


 
catdog ©   (2008-03-17 13:10) [1]

черт, совсем забыл что есть zeromemory, пора завязывать с пивом:)
НО!
при таком раскладе: (когда полностью очищаю дерево)

zeromemory(addr(PData(treeview1.TVItemData[Item])^.FName),length(PData(treeview1 .TVItemData[Item])^.FName));
zeromemory(addr(PData(treeview1.TVItemData[Item])^.typeoffile),sizeof(PData(tree view1.TVItemData[Item])^.typeoffile));


ошибка при очистке строки (не обязательно первой, вылетает через несколько удаленных строк)
помогите.....


 
mdw ©   (2008-03-17 13:16) [2]

Ну обычно New() используется в связке с Dispose()... А к чему zeromemory не понятно.


 
catdog ©   (2008-03-17 13:38) [3]

Мда, старею я...:)

Почему не очищается память без 2-х первых строк?? Видимо я пропустил в жизни что-то:

PData(treeview1.TVItemData[Item])^.FName := "";
PData(treeview1.TVItemData[Item])^.typeoffile := 0;
dispose(treeview1.TVItemData[Item]);


 
mdw ©   (2008-03-17 14:22) [4]


> Почему не очищается память без 2-х первых строк??

В смысле без:
> PData(treeview1.TVItemData[Item])^.FName := "";
> PData(treeview1.TVItemData[Item])^.typeoffile := 0;

?
Скорее без первой. Сами посмотрите. Вы распределяете память для записи, потом строковому полю присваеваете значение, т.е. распределяете память под строку. Если просто освободить запись, то память выделенная под строку не освободится, т.к. там хранится не сама строка, а грубо говоря указатель на нее. Поэтому ее нужно освободить самому (Fname:= ""). А вот typeoffile := 0; можно и не присваивать.



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
15-1248325667
Andy BitOff
2009-07-23 09:07
2009.09.20
Наконец-то слетел хелп...


2-1247796688
novai
2009-07-17 06:11
2009.09.20
Как правильно вызвать OnMouseDown?


15-1248346808
Наиль
2009-07-23 15:00
2009.09.20
Новое десятитысячелетие


1-1216127848
IGray
2008-07-15 17:17
2009.09.20
Встроенный локализатор Delphi2007 - глюк с кириллицей!


2-1248065231
lesey
2009-07-20 08:47
2009.09.20
Задать скорость в конфигурации модема