string(pchar);

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

string(pchar);

Сообщение hinst »

если у меня в коде есть такая фигня

Код: Выделить всё

var
  s: string;
  p: PChar;
begin
  s := string(p);
end;

то при таком присваивании для s создастся копия памяти, на которую указывает p или же копии не создастся?
и, если s выходит из области видимости, то менеджер строк высвободит память? и если высвободит, то какую, которая копия (если создаётся копия) или которая p ?
Как вообще работает паскальский менеджер строк в таких случаях?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Создастся копия, которая освободится при выходе s из области видимости.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

должен создать для s копию, при выходе s эту копию освободить. освобождение p (если оно выделялось) на совести програмиста, компилятор pchar не трогает
если сделать наоборот:

Код: Выделить всё

p:=@s[1];

то копии создано не будет и при выходе s p станет пальцем в небо
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

Спасибо.
А если наоборот вот так

Код: Выделить всё

  p := PChar(s);

то будет то же самое, копии не создастся?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

нет, не создастся
Ответить