Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Внизкак освобождать память, выделенную под массив Найти похожие ветки
← →
zxcv (2006-02-21 18:24) [0]есть функция
function s_ar(R:array of integer):integer;
var
i,k:integer;
begin
k:=0;
for i:=0 to high(R) do
begin
k:=k+R[i];
end;
result:=k;
end;
ВОПРОС: нужно ли после использования ф-ии освобождать память,
выделенную под массив, если да, то как это сделать
← →
Alkid © (2006-02-21 18:28) [1]Внутри функции этого точно делать не нужно.
Вне функции это зависит от того, какой массив ты создаёшь. Если
статический, то не надо. Если динамический, то надо.
← →
umbra © (2006-02-21 18:28) [2]не нужно. Вы же на самом деле передаете указатель, и никакая память под массив в функции не выделяется
← →
begin...end © (2006-02-21 18:36) [3]> umbra © (21.02.06 18:28) [2]
> Вы же на самом деле передаете указатель, и никакая память
> под массив в функции не выделяется
Выделяется. Но при выходе из функции автоматически освобождается.
← →
umbra © (2006-02-21 18:42) [4]2 begin...end © (21.02.06 18:36) [3]
может я чего-то не знаю, но, по-моему, в стеке будет выделено только 4 байта под адрес массива
← →
umbra © (2006-02-21 18:47) [5]2 begin...end © (21.02.06 18:36) [3]
хотя да, если менять значения элементов массива, то память выделится под весь массив
← →
begin...end © (2006-02-21 18:53) [6]> umbra © (21.02.06 18:42) [4]
Если функция будет описана так, как в [0], то перед её вызовом в два регистра будут помещены верхняя граница индексов массива (если считать, начиная с нуля) и указатель на его тело. А сразу после её вызова внутри функции в стеке будет создана копия тела массива. Причём не имеет значения, какой массив передаётся в функцию -- статический, динамический или "сконструированный" открытый.
> umbra © (21.02.06 18:47) [5]
И если не менять -- тоже.
← →
umbra © (2006-02-21 18:56) [7]2 begin...end © (21.02.06 18:53) [6]
спасибо
← →
Zeqfreed © (2006-02-21 18:57) [8]В справке написано, что при передаче динамического массива даже по значению, присваение его элементам значений будет изменять оригинальный массив. Так что мне кажется, что создание локальной копии в этом случае не происходит, или я не прав?
← →
begin...end © (2006-02-21 19:07) [9]> Zeqfreed © (21.02.06 18:57) [8]
Если массив передаётся как динамический, то копии не создаётся. А если как открытый (о чём и речь), то создаётся. В том числе и для случая, когда в качестве открытого массива передаётся динамический.
← →
Zeqfreed © (2006-02-21 19:11) [10][9] begin...end © (21.02.06 19:07)
Ага, уловил разницу. Спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c