![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tree.AddChildObject имеет параметр Ptr, как освободить память? [D6, Win2k]
Тип © (2003-02-05 12:40:00)Мастера , хелп ми...
Из хелпа узнаем:
The memory referenced by Ptris not freed when the tree nodes object is freed.
Как освободить память я не знаю... А то програ после 10-20 запусков гворит Access violation....
Как бороть?
Тип(Мастера, ау) (2003-02-05 17:20:00) [1]Блин, ну как же быть, работа стоит... Помогите, плиз...
Романов Р.В. (2003-02-05 15:53:00) [2]
> Тип (05.02.03 15:36)
> 2 Романов Р.В. ©
> Ну почему тогда ошибка при удалении?
Хтож ее знает.
Тип (2003-02-05 15:47:00) [3]Ну с ошибкой вроде покончил, так теперь получается у меня в Data хранится не понятно что, так как детей не показывает...
Skier (2003-02-05 15:41:00) [4]>Тип
> И , кстати, у тебя два end в конце, а begin один...
I"m done !
Тип (2003-02-05 15:39:00) [5]2 Skier ©
Не помогло, теперь детей не показывает, и ошибку выдает.
И , кстати, у тебя два end в конце, а begin один...
Тип (2003-02-05 15:36:00) [6]2 Романов Р.В. ©
Ну почему тогда ошибка при удалении?
Романов Р.В. (2003-02-05 15:26:00) [7]Тут ничего удалять не надо. Само рассосется.
Skier (2003-02-05 15:23:00) [8]type
PInteger = ^Integer;
var
AInt : PInteger;
begin
//.............
New(AInt);
AInt^ := FieldByName("ID_OPERATION").AsInteger;
TempNode:=AddChildObject(Node , FieldByName("NAME_OPERATION").AsString, AInt);
//................
//.............................
procedure TForm1.Tree1OnDeletion(Sender: TObject; Node: TTreeNode);
begin
if Node.Data <> Nil then
Dispose(Node.Data);
Node.Data := nil;
end; //if
end;
//.............................
Тип (2003-02-05 15:19:00) [9]2 Романов Р.В. ©
Данные из БД. Я строю дерево на основе БД, вот как я добавляю:
TempNode:=AddChildObject(Node , FieldByName("NAME_OPERATION").AsString, Pointer(FieldByName("ID_OPERATION").AsInteger));
Романов Р.В. (2003-02-05 15:14:00) [10]Тип, что у тебя хранится в Data если не секрет?
Тип (2003-02-05 15:13:00) [11]
> Skier © (05.02.03 15:12)
> Гадание на кофейной гуще...
> Код для модуля формы !
Ввесь? да там много...
Тип (2003-02-05 15:12:00) [12]
> 2 Skier © (05.02.03 15:09)> >Тип
> Кстати, тебе нужно будет обязательно написать
> освобождения данных для узлов
А в OnDeletion , что разве не освобождение?
Access violation... возникает, когда я делаю Tree.Items.clear...
Skier (2003-02-05 15:12:00) [13]Гадание на кофейной гуще...
Код для модуля формы !
Тип (2003-02-05 15:09:00) [14]ругается Access violation...
Skier (2003-02-05 15:09:00) [15]>Тип
Кстати, тебе нужно будет обязательнонаписать
освобождения данных для узлов в деструкторе формы или в обработчике TYourForm.OnDestroy иначе память при каждом уничтожении формы будет течь...
Skier (2003-02-05 15:03:00) [16]>Тип
Ну да, ну да...
Короче вот так, примерно :
procedure TForm1.Tree1OnDeletion(Sender: TObject; Node: TTreeNode);
begin
if Node.Data <> Nil then
Dispose(Node.Data); //или FreeMem(Node.Data)
Node.Data := nil;
end; //if
end;
Тип (2003-02-05 15:02:00) [17]2 Skier ©
Я ламер(пока еще) , извини если вызвал бурные эмоции, но
на Dispose(Node.Data) или FreeMem(Node.Data) ругается Access violation...
Я написал Node.Data := nil вроде работает.
Skier (2003-02-05 14:47:00) [18]>Тип
> Вместо ...
> написал
> Node.Free;
!!!???
Напиши
Dispose(Node.Data) или FreeMem(Node.Data)
(It depends)
Тип (2003-02-05 14:43:00) [19]2 icWasya ©
Вместо ...
написал
Node.Free;
Но теперь выскакивает Stack overflow....
icWasya (2003-02-05 13:54:00) [20]Tree.OnDeletion-
procedure TForm1.Tree1OnDeletion(Sender: TObject; Node: TTreeNode);
begin
if Node.Data <>Nil then
........;
end;