Форум: "Основная";
Текущий архив: 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)
Это к делу не относится.
Создай новую ветку.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c