Здравствуйте господа, вот назрел вопрос об освобождении памяти занятой типом String.
Код:
type
PMyInfo = ^TMyInfo;
TMyInfo = record
a:pointer;
s:integer;
b:PMyInfo;
end;
var
MyInfo:PMyInfo;
procedure qwerty;
var
MyStr:PString;
begin
new(MyStr); {*}
MyStr^:='qwerty'; {**}
new(MyInfo);
MyInfo.a:=MyStr;
MyInfo.s:=sizeof(MyStr);
end;
begin
{...некоторый код...}
qwerty;
freemem(MyInfo.a,MyInfo.s);
dispose(MyInfo);
end.
в данном примере память выделяется 1) при создании указателя на строку(*) 2) при присвоении строке значения (**)
освобождая командой freemem память мы освобождаем указатель на строку, но судя по переменной AllocMemcount - память занятая самой строкой не освобождается, в следствии чего возникают утечки. В общем случае нам неизвестен тип данных хранимых в переменной a. Известен размер для корректного освобождения памяти. Как корректно освободить память занятую string'ом???