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

Вниз

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)
Это к делу не относится.
Создай новую ветку.



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

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

Наверх




Память: 0.49 MB
Время: 0.021 c
7-19014
SAlex
2001-08-01 16:11
2002.02.07
Производитель, дата и версия BIOS


4-19036
Alex Y.
2001-12-10 11:43
2002.02.07
---|Ветка была без названия|---


4-19019
Art
2001-12-10 17:20
2002.02.07
Ђ где взЯть справочную инфц по Api???


14-18952
p@s
2001-12-18 12:17
2002.02.07
Пропали хинты


6-18938
ZserG
2001-11-18 02:23
2002.02.07
Как вставить инструментальную панель в Explorer?