Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

VarArrayCreate 


User_OKA   (2002-01-23 14:57) [0]

Уважаемые Мастера!
Возник такой вопрос в нашей среде доморощенных программистов:
имеем
function TForm1.Summa:variant;
begin
Result:=VarArrayCreate([0..10],varVariant);
...
end;
функция эта запускается несколько раз.
А с памятью,которая выделяется под массив, как быть? Освобождается ли она после отработки функции или выделяется при каждом вызове?
Или мы вообще загнались и проблемы не существует?



Digitman   (2002-01-23 15:02) [1]

а куда возвращается результат ф-ции ? как и где приемник результата объявлен ?



User_OKA   (2002-01-23 15:14) [2]

to Digitman
А результат присваевается либо переменной integer, либо extended в зависимости от необходимости. Переменные объявлены в public.
Сама функция обрабатывает SQL-запрос. Точнее, сбрасывает значения результирующих полей в массив. Такой вот универсальности захотелось. А то SQL-запросов много, возвращают то одно поле, то несколько.



Юрий Федоров   (2002-01-23 15:38) [3]

Что, переменной integer присваивается вариант, который является
массивом? 8(



Digitman   (2002-01-23 15:39) [4]

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



User_OKA   (2002-01-24 06:43) [5]

to Digitman
Ну зачем же сразу в монастырь?
Если V:variant;
X:integer;
Y:extended;
Z:string;
V:=VarArrayCreate([0..N],varVariant);
V[0]:=1;
V[1]:=2.5;
V[3]:="asdf";
то вполне уместно (если мне наперед известны все элементы массива)
X:=V[0];
Y:=V[1];
Z:=V[2];
В моём случае V - это result функции. Но это, по-моему и неважно. Вопрос был - что с памятью делается? Освобождается она или нет после многократного вызова функции?
А Юрий Федоров тоже удивился!..



User_OKA   (2002-01-24 07:13) [6]

Ещё подробнее:

public
{ Public declarations }
X:integer;
Y:extended;
Z:string;
H:date;
Select, From, Where:string; //переменные для SQL-запроса
function SQL_Summa:variant;
end;

function TMainForm.SQL_Summa:variant;
var i:integer;
begin
Result:=VarArrayCreate([0,10],varVariant);
with DM.FIBQuery do begin
Close;
SQL.Clear;
SQL.Add(Select);
SQL.Add(From);
SQL.Add(Where);
ExecQuery;
for i:=0 to FieldCount-1 do
if Fields[i].Value=Null then Result[i]:=0
else Result[i]:=Fields[i].Value;
end;
end;

Затем Select:="Select ...";
From:="From ...";
Where:="Where ..."; - формирую запрос (порядок, количество и тип возвращаемых полей известны).

X:=SQL_Summa[0];
Y:=SQL_Summa[1];
Z:=SQL_Summa[2];
H:=SQL_Summa[3];



panov   (2002-01-24 07:50) [7]

Память не должна "утекать", т.к использование переменных типа Vatiant, не должно ничем отличаться от использования переменных других типов. (По моему мнению):-)



Digitman   (2002-01-24 09:08) [8]

>User_OKA
Так ведь результат-то - МАССИВ, а не ЭЛЕМЕНТ МАССИВА !) Разница есть ?

А утечка памяти в этом случае исключена.




User_OKA   (2002-01-24 09:36) [9]

Спасибо всем!
Особая благодарность будущему монаху Digitman за категоричность ответов! :)



Digitman   (2002-01-24 11:05) [10]

>User_OKA
>>"А Юрий Федоров тоже удивился!.." - как тут не удивиться))

Не за что, уважаемый).. носи - не стаптывай) ... и, пожалуйста, старайся быть предельно точным в терминологии, а то монастыри, думается, переполнены будут) ...

А по сабжу (если интересно) нужно заметитить, что контроль за вариантными переменными и состоянием памяти, относящейся к ним, полностью берет на себя сам ObjectPascal. Время жизни блока памяти, управляемого вариантами, равно времени жизни самих вариантов.



Дмитрий   (2002-01-24 12:17) [11]

Тут, кстати, проблема интересная - к вопросу "на чем писать" - либо на Object Pascal, который берет на себя много работы по сборке мусора, либо на С++, где memory leaks ищутся долго и нудно; так вот хотелось бы узнать - насколько вариант сборки, предлагаемый борландом, ресурсоемок и быстр (в плане работы со строками, динамическими и вариантными массивами) по сравнению с ручной "зачисткой"?



panov   (2002-01-24 13:26) [12]

>Дмитрий © (24.01.02 12:17)
Это к делу не относится.
Создай новую ветку.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.032 c
3-18693           HydraMarat            2002-01-08 23:21  2002.02.07  
Поиск через SQL


3-18747           Dim                   2002-01-11 09:22  2002.02.07  
Значение параметра по умолчанию в InterBase e.


3-18779           nikols                2002-01-09 10:49  2002.02.07  
Вызов хранимой процедуры из пакета Oracle через BDE


14-18962          yuger                 2001-12-17 16:39  2002.02.07  
Как правильно организовать Trial версию программы?


3-18690           cyberwarlock          2002-01-09 08:07  2002.02.07  
Вопрос по Paradox