Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизДинамические массивы Найти похожие ветки
← →
Misha (2002-12-05 11:01) [0]Как правильно освободить память, выделенную под динамический массив при помощипроцедуры SetLength.
var
a:array of array of integer;
begin
SetLength(a,10,5);
end;
Будет ли она освоюождена полностью, если я выполню
a:=nil;
И ещё такой вопрос в
var
a:array[100] of integer;
pa:=^a;
i,n:integer;
begin
n:=10;
GetMem(pa,n*sizeof(integer));
For i:=1 to n do pa^[i]:=0;
end;
Проведя пошаговое тестирование программы, я обнаружил, что
указатель ссылается на массив из 100 элементов, а не из 10,
почему так?
← →
FreeLancer (2002-12-05 11:08) [1]Пример из Delphi Help:
var
F: file;
Size: Integer;
Buffer: PChar;
begin
AssignFile(F, "test.txt");
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size);
try
BlockRead(F, Buffer^, Size);
ProcessFile(Buffer, Size);
finally
FreeMem(Buffer);
end;
finally
CloseFile(F);
end;
end;
← →
Skier (2002-12-05 11:09) [2]>Misha
> Будет ли она освоюождена полностью, если я выполню
> a:=nil;
Будет...
To deallocate a dynamic array, assign nil to a variable that references the array or pass the variable to Finalize;
← →
FreeLancer (2002-12-05 11:10) [3]А для зануления массива:
SetLength(MyArray, 0);
← →
Внук (2002-12-05 11:25) [4]>>Проведя пошаговое тестирование программы, я обнаружил, что
указатель ссылается на массив из 100 элементов, а не из 10,
почему так?
Потому что компилятор и отладчик считают, исходя из типа переменной, что там лежит массив из 100 элементов. Память же выделена только для 10, поэтому реально только с ними и можно работать, остальное - на свой страх и риск.
Приведенный пример один в один похож на примеры из книги Рода Стивенса "Delphi. Готовые алгоритмы", глава вторая. Там все подробно описано с большим количеством других полезных фрагментов кода :)
← →
LongIsland (2002-12-05 11:29) [5]
> Внук © (05.12.02 11:25)
> книги Рода Стивенса "Delphi. Готовые алгоритмы", глава вторая
Давно хотел спросить, ее в електронном виде нету?
← →
Внук (2002-12-05 11:36) [6]Не видел. Я читал в бумаге, сейчас в Internet-магазинах продается.
← →
Anatoly Podgoretsky (2002-12-05 11:46) [7]Там вообще не понятно, сначала присваивается статический масси, а потом сразу де зачем то заменяется на динамически выделенную память, имитирующию этот массив.
А верно или неверно делает коипилятор определить нельзя, так как как не приведено описание PA
← →
Внук (2002-12-05 11:54) [8]Anatoly Podgoretsky © (05.12.02 11:46)
Действительно, ерунда. Я прочитал это как
type
a:array[100] of integer;
var
pa:=^a;
i,n:integer;
begin
...
Тогда есть смысл...
← →
LongIsland (2002-12-05 11:58) [9]А мне показалось, что он все-таки сослался на область из 100 integer"ов. Тогда
GetMem(pa,n*sizeof(integer));
, если n = 10 смысла не имеет.
Что не так?
← →
Anatoly Podgoretsky (2002-12-05 12:23) [10]Да нет у него объявлен статический массив
var
a:array[100] of integer;
Вот здесь этот массив присваивается указателю
pa:=^a;
А вот здесь этот указатель сразу заменяется на динамически выделенну. область
GetMem(pa,n*sizeof(integer));
Если же нужен действительно динамический массив, то его надо и использовать, а не мамостоятельно выделять память и отслеживать это в дальнейшем
a:array of integer;
PA совсеи не нужен
← →
Misha (2002-12-05 14:03) [11]Прошу прощения, за свои опечатки, мой пример выглядит так
Type
Ta:array[100] of integer;
PTa:^Ta;
var
i,n:integer;
pa:PTa;
begin
n:=10;
GetMem(pa,n*sizeof(integer));
For i:=1 to n do pa^[i]:=0;
end;
← →
perov (2002-12-05 14:44) [12]А в какой версии Делфи можно так описывать массивы
array[100] of integer ?
Нижняя граница чему равна? 0 или 1?
← →
Anatoly Podgoretsky (2002-12-05 15:41) [13]Pa указатель на Ta, который соответствующего размера, так что все правильно
← →
Дельфятник (2002-12-05 16:04) [14]А у меня есть такой вопрос. Бывают ли утечки памяти прри работе с динамическим массивом?
То есть, если в процедуре есть локальная переменная a: array of Integer и в этой процедуре этот массив заполняется чем-то, то нужно ли в конце писать a:=nil или нет?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c