string(pchar);

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

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

string(pchar);

Сообщение hinst » 04.09.2012 13:35:06

если у меня в коде есть такая фигня
Код: Выделить всё
var
  s: string;
  p: PChar;
begin
  s := string(p);
end;

то при таком присваивании для s создастся копия памяти, на которую указывает p или же копии не создастся?
и, если s выходит из области видимости, то менеджер строк высвободит память? и если высвободит, то какую, которая копия (если создаётся копия) или которая p ?
Как вообще работает паскальский менеджер строк в таких случаях?
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: string(pchar);

Сообщение Sergei I. Gorelkin » 04.09.2012 13:49:29

Создастся копия, которая освободится при выходе s из области видимости.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: string(pchar);

Сообщение zub » 04.09.2012 13:53:29

должен создать для s копию, при выходе s эту копию освободить. освобождение p (если оно выделялось) на совести програмиста, компилятор pchar не трогает
если сделать наоборот:
Код: Выделить всё
p:=@s[1];

то копии создано не будет и при выходе s p станет пальцем в небо
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: string(pchar);

Сообщение hinst » 04.09.2012 14:04:00

Спасибо.
А если наоборот вот так
Код: Выделить всё
  p := PChar(s);

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

Re: string(pchar);

Сообщение zub » 04.09.2012 14:07:41

нет, не создастся
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru