Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Фсщкгі   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.043 c
1-85949
Tik
2002-12-15 06:46
2002.12.26
TreeView


1-85970
Bedny
2002-12-12 22:33
2002.12.26
MkDir???


14-86098
romychk
2002-12-05 12:55
2002.12.26
Socket - все в одном


3-85850
atmamont
2002-12-07 16:35
2002.12.26
лучший способ заполнения primary key в парадоксе


3-85792
Dbrf
2002-12-05 10:46
2002.12.26
Выбор столбца из таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский