Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1140461400
ForX
2006-02-20 21:50
2006.03.12
MySQL "Unable to load libmysql.dll"


2-1140450462
drink
2006-02-20 18:47
2006.03.12
Вызов функции из другово модуля.


2-1140538748
Compton's G
2006-02-21 19:19
2006.03.12
Вопросик


2-1140616905
veb
2006-02-22 17:01
2006.03.12
Первая попытка подключения к инернету


8-1128398305
Bizquit
2005-10-04 07:58
2006.03.12
Delphi. Вывод форматированного текста на канвас.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский