|
|
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Похоже, что дело в не бобине. Начиная с Delphi 2 строки имеют управляемое время жизни и судя по отсутствию с 1996 года массовых проблем по двойному освобождению памяти, программы писались так, чтобы эти ситуации не проявлялись. Повод задуматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:55 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneМожно просто проверить счетчик ссылок вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора а если библиотека должна еще собираться на LLVM и на FPC - еще веселее будет Нет, это таки баг, потому чт оничего полезного (фича) он не добавляет. Barloneвсегда изменяя в процедуре значение нелокальной переменной Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных. Другими словами, set-теры строковых свойств классов теперь под запретом. Ну да, вышли из положения, чо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 15:53 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
schiпрограммы писались так, чтобы эти ситуации не проявлялись избегайте использовать базовые возможности компилятора по безопасности и оптимизации (const-параметры), и ваша программа будет работать в принципе это далеко не первая и далеко не последняя ошибка компилятора, и не самая худшая. были for-to-циклы, в которых сверху вниз до нуля шла переменная, например. но и хорошего тут ничего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 15:56 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochBarloneМожно просто проверить счетчик ссылок вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора Это вообще то было не про проверку на каждой операции, а про то, как убедиться, что фича действительно есть, даже когда программа не упала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 20:59 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Barloneвсегда изменяя в процедуре значение нелокальной переменной Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных. Другими словами, set-теры строковых свойств классов теперь под запретом. Ну да, вышли из положения, чо.[/quot]Ну не надо преувеличивать. Так же как работает a:=a для простой строковой переменной, так и сеттер будет работать, даже если в него передать само свойство. Ну если конечно у вас в сеттере не какая-то странная необходимость сначала старое значение очистить, а потом новое присвоить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 21:09 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Barloneвсегда изменяя в процедуре значение нелокальной переменной Другими словами, процедуры и функции не имеют права менять строковые переменные кроме локальных. Другими словами, set-теры строковых свойств классов теперь под запретом. Ну да, вышли из положения, чо.[/quot]Ну не надо преувеличивать. Так же как работает a:=a для простой строковой переменной, так и сеттер будет работать, даже если в него передать само свойство. Ну если конечно у вас в сеттере не какая-то странная необходимость сначала старое значение очистить, а потом новое присвоить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 21:16 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochBarloneМожно просто проверить счетчик ссылок вот-вот, на каждой операции со строкой лезть в implementation details и надеяться, что они не изменились с последнего обновления компилятора Это вообще то было не про проверку на каждой операции, а про то, как убедиться, что фича действительно есть, даже когда программа не упала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 21:16 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
В 2018 году кто-то еще использует глобальные строковые переменные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 00:34 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
X-CiteВ 2018 году кто-то еще использует глобальные строковые переменные?Тут не про глобальные переменные. Можно поиметь проблему, например передав одну строку через var и const параметр одновременно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Или как в изначальном примере через поле класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 07:37 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
X-CiteВ 2018 году кто-то еще использует глобальные строковые переменные? прочитай начало топика, там НЕТ никаких глобальных переменных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 13:15 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Тогда надо оформлять в QC, и то, запилят в роадмап на 2025 год.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 13:18 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ну а пока ничего не придумали, объявляем параметр (функции \ метода) как var и через var работаем с внешним указателем, не трогая внутри функции оригинальный. И таким образом прорабатываем специфику ООП создавая возможно и overload функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 13:28 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоНу а пока ничего не придумали, объявляем параметр (функции \ метода) как var и через var работаем с внешним указателем, не трогая внутри функции оригинальный. И таким образом прорабатываем специфику ООП создавая возможно и overload функцииЕсли в коде из первого поста просто поменять const на var, double-free конечно не будет, но логика работы сломается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 13:48 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
X-CiteТогда надо оформлять в QC, и то, запилят в роадмап на 2025 год.... 21642156 и 21643136 PS. а в родмап они запилят не исправление бага, а полное убиение классики и тотальный переход на LLVM с необязательной ловлей исключений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 14:12 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneЕсли в коде из первого поста просто поменять const на var, double-free конечно не будет, но логика работы сломается. Если честно, то код мне из первого поста показался очень странным и надуманным, и немного не компетентным. Возможно, задумка реализации была в край не правильно обдумана, и следует пересмотреть задачи ТС-У. Ибо, это не айс, к такому подходу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 14:23 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, это была сильно упрощенная копия реальной задачи - которая в свою очередь слегка допиленная демка древне-лохматого года как и все минимизации она надуманная. Вообще любой код, задача которого - продемонстрировтаь ошибку и больше ничего - он просто по определению надуманный если ты хочешь допилить основной код эксперта до более качественного вида - я только за ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2018, 14:43 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39688800&tid=2040522]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
204ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 521ms |

| 0 / 0 |
