2016-12-12 3 views
1

Я использую Delphi 10.0 Seattle.Динамический массив Delphi

Предположим, у меня есть запись, как это:

TmyRecord = record 
    a,b : string; 
    ar : array of string 
end; 

и переменную так:

v : array of TmyRecord; 

и код вроде этого:

SetLength(v,2); 
SetLength(v[0].ar,3); 
SetLength(v[1].ar,2); 
SetLength(v[0].ar[0],10); 
SetLength(v[0].ar[1],5); 
SetLength(v[0].ar[2],7); 
... 
v[0].ar[0][0] := 'aaaa'; 
v[0].ar[0][1] := 'bbbb'; 
.... 
v[1].ar[1][0] := 'xxxx'; 

Будет ли это утверждение:

SetLength(v,0); 

освободите всю занятую память, или я должен освободить ее вручную?

ответ

4

Память динамического массива автоматически управляется Delphi и освобождается при выходе из области видимости.

Очистка v массив автоматически освободит всю память, в том числе занятую ar членом вашей записи.

Вам не нужно ничего делать.

Вы можете также ясно v массив, установив его в nil

v := nil; 

или с помощью внутренней Finalize:

Finalize(v); 

Все они имеют одинаковое значение.

+0

Обычно (например, если 'v' является локальной переменной), я бы очистил его, ничего не делая (просто позволяя ему выпасть из области видимости). –

Смежные вопросы