Смешной баг dispose()

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

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

Смешной баг dispose()

Сообщение runewalsh » 20.06.2020 20:05:11

Уже зарепортил, но правда же смешно.
Код: Выделить всё
{$mode objfpc} {$h+}
function CreateString: pString;
begin
    writeln('Создание строки');
    new(result);
end;

begin
    dispose(CreateString); // печатает «Создание строки» дважды
end.

Ассемблерный листинг выглядит так, будто когда dispose управляемого типа разделяется на Finalize и FreeMem, обе перевычисляют аргумент.
Аватара пользователя
runewalsh
постоялец
 
Сообщения: 456
Зарегистрирован: 27.04.2010 00:15:25

Re: Смешной баг dispose()

Сообщение zub » 21.06.2020 23:30:07

>>но правда же смешно
Пока такое ищешь уревешся, а потом, да, смешно
zub
долгожитель
 
Сообщения: 2558
Зарегистрирован: 14.11.2005 23:51:26

Re: Смешной баг dispose()

Сообщение скалогрыз » 22.06.2020 06:41:57

интересно да. глюк только для managed type, и их содержащих
Код: Выделить всё
{$mode objfpc} {$h+}
type
  PRec = ^TRec;
  TRec = record
    s: string; // можно заменить на "array of byte" - глюк останется
               // но если поменять на integer, то работает норм.
  end;
 

function CreateString: PRec;
begin
    writeln('Создание строки');
    new(result);
end;

begin
    dispose(CreateString); // печатает «Создание строки» дважды
end.
скалогрыз
долгожитель
 
Сообщения: 1700
Зарегистрирован: 03.09.2008 02:36:48


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

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

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

Рейтинг@Mail.ru