私は、コールバックプロシージャを持っている:ローカル配列を永続的にする方法は?
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)が変更されます。
この説明の1つは、コールバックを離れるときに配列用のメモリが解放され、レコード用にもう一度再利用されたことです。
したがって、InitDataコールバックを残した後でも配列は割り当てられたままですか?もしそうでなければ、それを割り当てたままにする方法。コールバックのシグネチャを変更したくない、新しいパラメータを導入したり、関数に変更することはできません。
ありがとうございます。