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

Вниз

Дерево :)   Найти похожие ветки 

 
Фсщкгі   (2002-12-16 14:16) [0]

Нужно динамически создать экземпляр структуры так чтобы при выходе из функции (где она создается) не терять структуру. То есть следующий вариант НЕ ПРЕДЛАГАТЬ:

...
var node: TStructure;
begin
node := TStructure.Create;
...
end;


 
KoluChi ©   (2002-12-16 14:20) [1]

function ...: TStructure;
var node: TStructure;
begin
Result := TStructure.Create;
...
end;


 
Acorus ©   (2002-12-16 14:23) [2]

Да нет! - мне нужно в этой функции дерево строить - так что нужно чтоб структурка динамически в памяти оставалась


 
Skier ©   (2002-12-16 14:26) [3]

>Acorus
Так она и останется если ты будешь
использовать (при создании) или объекты или дин. структуры,
а из функции возвращать указатель на корень дерева.


 
KoluChi ©   (2002-12-16 14:27) [4]

>так что нужно чтоб структурка динамически в памяти оставалась
А кто/что мешает?
Адрес структуры все-равно нужно возвращать, а для этого есть только 2 способа:
1. Результат функции.
2. Параметр функции.


 
Acorus ©   (2002-12-16 14:37) [5]

специфика в том что эта функция - колбэк из API (у нее все фиксированно - параметры и результат - ничего из предложенного не подходит) - она дает мне инфу для каждого нода в дереве

первый раз получаю рута
при каждой следующей итерации прицепляю новую ноду - для этого нужно чтоб предыдущие ноды (структурки) сохранялись в динамической памяти так как прицепление должно происходить примерно так:

...
if pPrev <> Nil then
pPrev.Next := @Temp;
if (pParent <> Nil) And (pParent.Child = Nil) then
pParent.Child := @Temp;
if (pParent = Nil) and (pPrev = Nil) then
root := Temp;
...


 
Skier ©   (2002-12-16 14:42) [6]

>Acorus
Видимо у тебя Temp объявлен
var
Temp : TSomeRecord;
begin
end;

и, естественно, при таком подходе после
выхода из функции никакого Temp в памяти уже не будет !

Тебе нужно пользоваться дин. структурой и выделять
под неё память самостоятельно.

PSomeRecord = ^TSomeRecord;
var
Temp : PSomeRecord;
begin
New(Temp);
//.......
pPrev.Next := Temp;
end;


 
Acorus ©   (2002-12-16 14:47) [7]

O! - оно !
- я просто Дельфы не знаю
- СПАСИБО! :))



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
3-85821
mio
2002-12-03 14:11
2002.12.26
НЕ-сетевой обмен данными между двумя БД


1-85907
Шишкин Илья
2002-12-16 20:20
2002.12.26
StringGrid


14-86164
TTCustomDelphiMaster
2002-12-06 15:34
2002.12.26
Пятница - банно стаканный день


7-86190
BJValentine
2002-10-22 15:02
2002.12.26
Ярлыки


3-85858
Alex737
2002-12-07 18:51
2002.12.26
null & 0 при сортировке!