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

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

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

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

Сообщение Azazaz » 12.03.2017 23:28:50

Есть тип:
Код: Выделить всё
TStrs = array[0..3]of Pchar;
PStrs = ^TStrs;

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

Потом выполнить:
Код: Выделить всё
Dispose(P);

Будет ли очищено содержимое указателей PChar внутри массива?
Azazaz
новенький
 
Сообщения: 34
Зарегистрирован: 21.04.2015 20:00:03

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

Сообщение fedan » 12.03.2017 23:46:34

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), нужно освободить её.
fedan
новенький
 
Сообщения: 22
Зарегистрирован: 15.09.2016 21:18:48

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

Сообщение Дож » 13.03.2017 03:04:36

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

Нет.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 633
Зарегистрирован: 12.10.2008 16:14:47


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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 2

Рейтинг@Mail.ru