Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Освобождение памяти от string


Автор: Gershkovich 27.12.2006, 18:13
Всем привет!

У меня такая ситуация :
В DLL формирую строку - выделяю память через HeapAlloc,
заполняю ее какими-нить символами
и возвращаю в основную программу (Delphi) указатель на нее


В основоной программе есть вот такой класс:
Код

TStringValue = class
  Value : string;
end;


и создаю строку 
Код

StringValue.SetValue(StrPas(Ptr(FarCallResult)));


FarCallResult : integer - это то что вернула ДЛЛ
Все работает нормально.

Вопрос: освободится ли память после освобождения объекта ???
Код

StringValue.Free;


Или мне надо самому ручками удалять через HeapFree ?


Автор: Snowy 27.12.2006, 18:31
Не выделяй память - пусть это делает вызывающая программа.

Автор: Gershkovich 27.12.2006, 18:45
Все таки интересно куда девается  строка
скажем в случае явного задания строки:


Код

TStringValue = class
  Value : string;
end;

StringValue.SetValue("Hello World!");

StringValue.Free;


Автор: Romikgy 27.12.2006, 19:44
имхо никуда, просто ссылка на эту строку обняляется, чем разрешает писать на место строки любые данные

Автор: W4FhLF 27.12.2006, 20:04
HeapFree удаляет из управляющей структуры кучи запись об этом участке и заполняет участок "случайными" данными, строка в памяти существовать перестаёт.

Автор: bems 27.12.2006, 20:06
Value освобождается. A результат HeapAlloc нужно освободить руками

Добавлено @ 20:08 
Цитата(W4FhLF @  27.12.2006,  20:04 Найти цитируемый пост)
и заполняет участок "случайными" данными
клас!  smile  smile 
А зачем она это делает, а?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)