Автоматическое управление памятью

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

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

Ответить
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Автоматическое управление памятью

Сообщение Azazaz »

Есть тип:

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

TStrs = array[0..3]of Pchar;
PStrs = ^TStrs;

Если сделать вот так:

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

var P: PStrs;
...
new(P);
{заполняем значения строк, например P^[0]:= 'first', ...}

Потом выполнить:

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

Dispose(P);

Будет ли очищено содержимое указателей PChar внутри массива?
fedan
новенький
Сообщения: 70
Зарегистрирован: 15.09.2016 20:18:48

Сообщение fedan »

Azazaz писал(а):Будет ли очищено содержимое указателей PChar внутри массива?

А если посмотреть на это немного по другому:

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

var
  P: PChar;
begin
  P := 'first constant';
  Writeln('memory address: ', PtrUInt(P), ', value: ''', P,'''');

  P := 'second constant';
  Writeln('memory address: ', PtrUInt(P), ', value: ''', P,'''');
end;

Во первых, содержимое указателей очищенно не будет. Будет освобождена память только для sizeof(TStrs).
Во вторых, если содержимое указателей PChar указывает на константы, то освобождать память у них не надо, а если нужно в них содержать динамически выделенную память, то перед Dispose(P), нужно освободить её.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Будет ли очищено содержимое указателей PChar внутри массива?

Нет.
Ответить