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

Вниз

Пропадают данные из TreeNode.Data при обращении к ним.   Найти похожие ветки 

 
Profi ©   (2005-10-03 13:34) [0]

Если в функции делаю так:

Sp:=TStringList.Create;
Sp:=TreeNode.Data;


То при повторном обращении выскакивает AV. Как быть? Могу привести функцию полностью.


 
Amoeba ©   (2005-10-03 13:36) [1]


> Могу привести функцию полностью.

Не просто можно, но обязательно нужно.


 
begin...end ©   (2005-10-03 13:37) [2]

> Profi ©   (03.10.05 13:34)

> Sp:=TStringList.Create;
> Sp:=TreeNode.Data;

Утечка памяти.


 
Profi ©   (2005-10-03 13:39) [3]

begin...end ©   (03.10.05 13:37) [2]
Я это понимаю, но откуда она? И как этого избежать?


 
Amoeba ©   (2005-10-03 13:42) [4]


> Я это понимаю, но откуда она? И как этого избежать?


Как откуда? Она просто обязана быть в таком коде. Включи мозги!


 
begin...end ©   (2005-10-03 13:43) [5]

> Profi ©   (03.10.05 13:39) [3]

> откуда она?

> Sp:=TStringList.Create
Сохраняем ссылку на только что созданный объект в переменной Sp.

> Sp:=TreeNode.Data
Затираем эту ссылку значением свойства TreeNode.Data. Предыдущая ссылка потеряна.


 
Profi ©   (2005-10-03 13:45) [6]

begin...end ©   (03.10.05 13:43) [5]
1. Sp:=TStringList.Create можно не писать?
2. Дело в том. Что если где-то в программе я опять сделаю Sp:=TreeNode.Data вот тогда-то и выскакивает AV.


 
begin...end ©   (2005-10-03 13:46) [7]

> Profi ©   (03.10.05 13:45) [6]

А в чём смысл всего этого?


 
Profi ©   (2005-10-03 13:50) [8]

begin...end ©   (03.10.05 13:46) [7]
Привожу функцию:

Procedure TDMBase.GetTreeForFile(FileName:String; TreeView:TTreeView; Registr:Boolean);
var i,j,ind,k:integer;
Sp:TStringList;
est:boolean;
begin
 k:=TreeView.Items.Count-1;//Смотрю, на сколько уже заполнен TreeView.
 AddBaseToTreeView(TreeView,(TreeView.Images as TImageList),true);//Дополняю его (В этой функции все ок).
 ind:=-1;
 for i:=0 to TreeView.Items.Count-1 do
   if ind<TreeView.Items[i].AbsoluteIndex then
     ind:=TreeView.Items[i].AbsoluteIndex; //Нахожу самой нужний хвост.
 Sp:=TStringList.Create;
 repeat
   i:=-1;
   Repeat
     inc(i);
     If (i>treeView.Items.Count-1) then break;
     If TreeView.Items[i].AbsoluteIndex=ind then begin
       If TreeView.Items[i].Data<>nil then begin//Если data не пустое...
         Sp.Clear;
         Sp:=TreeView.Items[i].Data;
         est:=false;
         For j:=0 to Sp.Count-1 do
           If registr then begin
             If pos(LowerCase(FileName),LowerCase(Sp.Strings[j]))>0 then begin
              est:=true;
              Break;
             end;
           end else
           if pos(FileName,Sp.Strings[j])>0 then begin
             est:=true;
             Break;
           end;//...Проверяю есть ли в списке нужное мне слово.
         If (Not Est) and (treeView.Items[i].getFirstChild=nil) then begin
           TreeView.Items[i].Delete; //Если нет удаляю хвост.
         end;
       end else begin
         If TreeView.Items[i].getFirstChild=nil then begin
           TreeView.Items[i].Delete;
         end;
       end;
     end;
   Until i>=(TreeView.Items.Count-1)-k;
   ind:=ind-1;
 until ind=-1;
 sp.Free;
end;


Остаются хвосты, где в data есть нужное слово. Мне надо его просмотреть, но выскакивает AV.


 
Amoeba ©   (2005-10-03 13:52) [9]


> Дело в том. Что если где-то в программе я опять сделаю Sp:
> =TreeNode.Data вот тогда-то и выскакивает AV.

Не надо так делать! Тем более, если ты profi.


 
Vladimir88   (2005-10-03 14:00) [10]

//if TreeView.Items[i].Data<>nil
имхо лучше
if Assigned(TreeView.Items[i].Data);
//Sp:=TreeNode.Data;
хм, просто назначать пойнтер стринглисту имхо есть неправильно
Sp:=TStrings(TreeNode.Data);


 
Vladimir88   (2005-10-03 14:01) [11]

//if TreeView.Items[i].Data<>nil
имхо лучше
if Assigned(TreeView.Items[i].Data);
//Sp:=TreeNode.Data;
хм, просто назначать пойнтер стринглисту имхо есть неправильно
Sp:=TStrings(TreeNode.Data);


 
Profi ©   (2005-10-03 14:02) [12]

Amoeba ©   (03.10.05 13:52) [9]
Отличная мысль! Спасибо!
Vladimir88   (03.10.05 14:01) [11]
Уже исправил! Сделал так Sp.AddStrings(TreeNode.data);



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

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

Наверх




Память: 0.5 MB
Время: 0.047 c
2-1127821155
Wolferio
2005-09-27 15:39
2005.10.23
ShellListView


14-1128010100
Cerberus
2005-09-29 20:08
2005.10.23
Подскажите скрипт на php форума


11-1109056582
Сергей Близнюков
2005-02-22 10:16
2005.10.23
Ошибка TBitmap.LoadFromResource в Win98 Версия KOL >=2.04


3-1126454256
VladBD
2005-09-11 19:57
2005.10.23
Нумерация записей с учетом сортировки


1-1128315242
Kacnep
2005-10-03 08:54
2005.10.23
Правильно завершить Приложение при создании