У меня есть процедура обратного вызова:
type
TInitCallback = procedure (var Data: Pointer);
Идея состоит в том, что после инициализации Data
может указывать на что угодно.
Я пытался назначить эту процедуру для обратного вызова иinit Data
таким образом, чтобы он указывал на вновь созданный массив:
type
TBoolArray = array of Boolean;
procedure InitData(var Data: Pointer);
var
BoolArray: TBoolArray;
i: Integer;
begin
SetLength(BoolArray, 10);
for i := 0 to Length(BoolArray) - 1 do
BoolArray[i] := False;
Data := BoolArray;
end;
Однако я не уверен, что счетчик ссылок увеличивается для массива при присваивании: Data := BoolArray;
.Другими словами - я не уверен, что массив остается в памяти после выхода из процедуры или он был освобожден?
Потому что позже при выполнении программы, когда я изменяю данные в какой-то другой структуре (записи, котораяне имеет ничего общего с этим массивом), это изменение вносит изменения в ранее выделенный массив (Data).
Одним из объяснений этого было бы то, что память для массива была освобождена при выходе из обратного вызова и повторно использована длязапись.
Итак, массив остается выделенным после выхода из обратного вызова InitData или нет?А если нет, то как заставить его остаться выделенным.Обратите внимание, что я не хочу менять подпись моего обратного вызова, я не могу вводить какие-либо новые параметры или изменять их в функции.
Спасибо.