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

Вниз

как освобождать память, выделенную под массив   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
5-1127113687
kivadim
2005-09-19 11:08
2006.03.12
Что изменить в CheckListBox чтоб галочки не ставились?


15-1140431797
McSimm
2006-02-20 13:36
2006.03.12
Caret в чужих окнах в зависимости от раскладки.


2-1140711503
K_Lock
2006-02-23 19:18
2006.03.12
Ошибка......


15-1139811814
Shlomo
2006-02-13 09:23
2006.03.12
InstallShield и русский?


15-1139916584
ZeroDivide
2006-02-14 14:29
2006.03.12
Сколько сейчас стоит написание диплома?