Главная страница
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.015 c
3-85805
Mishel
2002-12-06 11:12
2002.12.26
Как отсортировать запрос объединенный через UNION


1-85898
Пономарев Андрей
2002-12-16 10:30
2002.12.26
создание расширений IDE


1-85954
iap
2002-12-15 15:11
2002.12.26
TListView


14-86169
Slym
2002-12-06 20:40
2002.12.26
Нужны исходники алгоритмов шифрования DES и ГОСТ28147-89


14-86127
LazorenkoX
2002-12-04 23:28
2002.12.26
Borland C++ Builder