안녕하세요.
다음과 같이 record 를 구성하고 이를 pointer 변수로 정의 하였습니다.
pVertexRec = ^tVertexRec;
tVertexRec = record
var5 : String; //Handle
var8 : String; //Layer name
var10 : String; //X value
var20 : String; //Y value
var30 : String; //Z value (always 0)
end;
그리고
function TDxfOut.Sde2DxfPoint(aShape: IDispatch): Pointer;
var
aPoint : IMoPoint;
aVertexRec : pVertexRec;
begin
aPoint := IMoPoint(aShape);
New(aVertexRec);
aVertexRec^.var5 := GenerateHandle;
aVertexRec^.var8 := dxfLayer;
aVertexRec^.var10 := FloatToStr(aPoint.X);
aVertexRec^.var20 := FloatToStr(aPoint.Y);
aVertexRec^.var30 := '0.0';
result := aVertexRec;
end;
로 하여 받는 procedure 에서 TList 로 하여 pointer 를 Add 하였습니다.
그런데 여기까지는 좋은데
메모리에 할당된 부분을 해제하려고
procedure FreeRecMemory(recList: TList);
var
i : Integer;
pRec : Pointer;
begin
for i := 0 to recList.Count - 1 do begin
pRec := recList.Items[i];
Dispose(pRec);
end;
recList.Clear;
end;
함수를 만들어서 pointer 를 배열로 자장하였던 TList 를 인수로 넘겨서
Dispose 를 했는데
이 과정을 작업관리자의 프로세스를 확인해 보면 (참고로 Windos NT WorkStation)
메모리를 할당할 때는 메모리 사용이 증가하나
해제할 때는 전혀 감소를 하지 않습니다.
관심있는 분들의 조언 부탁드립니다.