powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XE2 string double-free
16 сообщений из 91, страница 4 из 4
XE2 string double-free
    #39688181
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что дело в не бобине. Начиная с Delphi 2 строки имеют управляемое время жизни и судя по отсутствию с 1996 года массовых проблем по двойному освобождению памяти, программы писались так, чтобы эти ситуации не проявлялись. Повод задуматься.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688232
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneМожно просто проверить счетчик ссылок

вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора

а если библиотека должна еще собираться на LLVM и на FPC - еще веселее будет

Нет, это таки баг, потому чт оничего полезного (фича) он не добавляет.

Barloneвсегда изменяя в процедуре значение нелокальной переменной

Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных.
Другими словами, set-теры строковых свойств классов теперь под запретом.

Ну да, вышли из положения, чо.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688235
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiпрограммы писались так, чтобы эти ситуации не проявлялись

избегайте использовать базовые возможности компилятора по безопасности и оптимизации (const-параметры), и ваша программа будет работать

в принципе это далеко не первая и далеко не последняя ошибка компилятора, и не самая худшая.
были for-to-циклы, в которых сверху вниз до нуля шла переменная, например.

но и хорошего тут ничего нет.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688381
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochBarloneМожно просто проверить счетчик ссылок

вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора

Это вообще то было не про проверку на каждой операции, а про то, как убедиться, что фича действительно есть, даже когда программа не упала.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688384
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barloneвсегда изменяя в процедуре значение нелокальной переменной

Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных.
Другими словами, set-теры строковых свойств классов теперь под запретом.

Ну да, вышли из положения, чо.[/quot]Ну не надо преувеличивать. Так же как работает a:=a для простой строковой переменной, так и сеттер будет работать, даже если в него передать само свойство. Ну если конечно у вас в сеттере не какая-то странная необходимость сначала старое значение очистить, а потом новое присвоить.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688386
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barloneвсегда изменяя в процедуре значение нелокальной переменной

Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных.
Другими словами, set-теры строковых свойств классов теперь под запретом.

Ну да, вышли из положения, чо.[/quot]Ну не надо преувеличивать. Так же как работает a:=a для простой строковой переменной, так и сеттер будет работать, даже если в него передать само свойство. Ну если конечно у вас в сеттере не какая-то странная необходимость сначала старое значение очистить, а потом новое присвоить.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688387
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochBarloneМожно просто проверить счетчик ссылок

вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора

Это вообще то было не про проверку на каждой операции, а про то, как убедиться, что фича действительно есть, даже когда программа не упала.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688432
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 2018 году кто-то еще использует глобальные строковые переменные?
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688473
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteВ 2018 году кто-то еще использует глобальные строковые переменные?Тут не про глобальные переменные. Можно поиметь проблему, например передав одну строку через var и const параметр одновременно:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure Test(var vv: string; const arg: string);
begin
  Writeln(PInteger (Integer (arg) - 8)^);
  vv := 'zzz'; 
// после присваивания значения первому параметру второй может оказаться невалидным
  Writeln(PInteger (Integer (arg) - 8)^);
end;

procedure T1(aa: string);
begin
 aa:=aa+'bbb';
 Test(aa,aa);
end;

begin
  T1('aaa');
end.

Или как в изначальном примере через поле класса
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688783
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteВ 2018 году кто-то еще использует глобальные строковые переменные?

прочитай начало топика, там НЕТ никаких глобальных переменных
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688790
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда надо оформлять в QC, и то, запилят в роадмап на 2025 год....
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688800
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а пока ничего не придумали, объявляем параметр (функции \ метода) как var и через var работаем с внешним указателем, не трогая внутри функции оригинальный. И таким образом прорабатываем специфику ООП создавая возможно и overload функции
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688835
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоНу а пока ничего не придумали, объявляем параметр (функции \ метода) как var и через var работаем с внешним указателем, не трогая внутри функции оригинальный. И таким образом прорабатываем специфику ООП создавая возможно и overload функцииЕсли в коде из первого поста просто поменять const на var, double-free конечно не будет, но логика работы сломается.
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688858
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteТогда надо оформлять в QC, и то, запилят в роадмап на 2025 год....

21642156 и 21643136

PS. а в родмап они запилят не исправление бага, а полное убиение классики и тотальный переход на LLVM с необязательной ловлей исключений
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688872
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneЕсли в коде из первого поста просто поменять const на var, double-free конечно не будет, но логика работы сломается.

Если честно, то код мне из первого поста показался очень странным и надуманным, и немного не компетентным. Возможно, задумка реализации была в край не правильно обдумана, и следует пересмотреть задачи ТС-У. Ибо, это не айс, к такому подходу
...
Рейтинг: 0 / 0
XE2 string double-free
    #39688902
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

это была сильно упрощенная копия реальной задачи - которая в свою очередь слегка допиленная демка древне-лохматого года

как и все минимизации она надуманная. Вообще любой код, задача которого - продемонстрировтаь ошибку и больше ничего - он просто по определению надуманный

если ты хочешь допилить основной код эксперта до более качественного вида - я только за
...
Рейтинг: 0 / 0
16 сообщений из 91, страница 4 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XE2 string double-free
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]