Показать сообщение отдельно
  #7  
Старый 21.06.2011, 10:53
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yacudzer
Здравствуйте господа, вот назрел вопрос об освобождении памяти занятой типом String.
Ну если обязательно нужно использовать PString, то так
Код:
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);
  MyInfo.s := Length(MyStr);
end;

/* а теперь всё в обратном порядке */
procedure disposeMyInfo(aMyInfo:PMyInfo);
var
  MyStr:PString;
begin
  MyStr := PString(aMyInfo.a);
  MyStr^:='';
  dispose(MyStr); // если выделяем через New, то и удаляем через dispose;
  dispose(aMyInfo);
end;

begin
{...некоторый код...}
  qwerty;
{...некоторый код...}
  disposeMyInfo(MyInfo);

end.
Ответить с цитированием