|
|
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Вот эта простенькая программка падает в XE2 c Invalid Pointer Operator. У кого под руками есть версии до и после - ради интереса проверьте, в какой версиии исправили? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 12:43 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochВот эта простенькая программка падает в XE2 c Invalid Pointer Operator. Проверил на XE2 - всё нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:10 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, точно ? без единого workaround'a включенного? XE2 Upd4 hotfix1 Win32 ? Ибо у меня плюётся исключением. Запускал на чистой ветке реестра, чтобы все эксперты прибить. Могу EXE прислать, хотя х.з. как их сравнивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:15 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochточно ? без единого workaround'a включенного? Абсолютно. Скопировал твой код, вырезел строчку подключения ресурсов. AriochXE2 Upd4 hotfix1 Win32 ? Да (16.0.4504.48759). Проверил релизы и дебаги для 32 и 64. Ничего не падает. AriochЗапускал на чистой ветке реестра, чтобы все эксперты прибить. У меня в IDE ничего не установлено: ни компонентов, ни экспертов ни фикспаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:19 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Соседи проверили в EmbarcaderoR Delphi 10.1 Berlin Version 24.0.25048.9432 Тоже падает. Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:25 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyСкопировал твой код, вырезел строчку подключения ресурсов. а если просто распаковать ZIP и его в delphi открыть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:25 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochа если просто распаковать ZIP и его в delphi открыть? Ха, открытый dpr падает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:29 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ась? Из-за отсутствия зависимостей или чего? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:30 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochТоже падает. Упс, бросил скриншот не проверив. Тут обрезанный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:32 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, из-за ошибки в компиляторе, причём какой-то очень странной и зависящей х.з. от чего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:33 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyСкопировал твой код, вырезел строчку подключения ресурсов. Открыл DPR, убрал смтроку {$R *.res} - падает. Т.е. дело не в ресурсах, а в том куда ты копировал... Предположу, что у тебя нестандартные пути ergo у тебя вообще файл исходников по EXE не находило и в функцию не заходило по сути ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:38 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Это баг компилятора. Пример, как в этом убедится (Добавляем в TDummy.Event) Код: pascal 1. 2. 3. 4. И баг исчерпан. Стоит убрать "TestTest := FileName;" и баг на Код: pascal 1. Снова проявляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:42 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyХа, открытый dpr падает Копируем текст dpr, создаём новый проект, вставляем текст, компилируем - не падает :). Сохраняем новый проект, компилируем - падает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:44 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, ну это и был там WorkAround #1 неправильно ссылки считает, сволочь... Есть у меня в загашнике еще более сложная вещь, требующая довольно сложной конструкции из EXE+BPL+BPL, неужели и ее могли не заткнуть? Жаль, QC убит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:45 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyКопируем текст dpr, создаём новый проект, вставляем текст а вот так? https://github.com/the-Arioch/XE2_AutoOpenUnit/commit/aba71622953af0605837a4c0f67792fac4ea0a16 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:46 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Товарищи, как можно, я же ночью спать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:48 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
GunSmoker, Гражданин! у вас вся ночь - белая! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:49 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochа вот так? Ну так ожидаемое file not found. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:54 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochПредположу, что у тебя нестандартные пути ergo у тебя вообще файл исходников по EXE не находило и в функцию не заходило по сути Вот и славно, никакой мистики, никакого подземного стука. Последняя проверка - сделай как раньше (новый проект, копи-паст), а потом в свойствах проекта убери нестандартную Output Directory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:56 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochПоследняя проверка - сделай как раньше (новый проект, копи-паст), а потом в свойствах проекта убери нестандартную Output Directory У меня там всё стандартное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 13:58 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAriochПоследняя проверка - сделай как раньше (новый проект, копи-паст), а потом в свойствах проекта убери нестандартную Output Directory У меня там всё стандартное. тогда откуда может взяться Kazantsev Alexeyожидаемое file not found. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:06 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochтогда откуда может взяться Ты у себя-то попробуй несохранённый проект запустить, предварительно очистив дефолтный локейшн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:09 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Сделал пример, более короткий, с проявлением данного бага (Одна процедура) Объясняю, почему на новом проекте не воспроизводится. - Потому, что у вас в новом проекте нету файла dproj Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:10 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Надо было exit то убрать. Он не влияет на работу бага Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:12 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyAriochтогда откуда может взяться Ты у себя-то попробуй несохранённый проект запустить, предварительно очистив дефолтный локейшн. а я не могу несохранённый, Delphi его требует сохранить. если не сохранять - не запускает это же не Turbo Pascal 5.x где можно было Compile To Memory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:18 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, спасибо я и так сильно упростил по сравнению с оригиналом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:19 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochKazantsev Alexeyпропущено... Ты у себя-то попробуй несохранённый проект запустить, предварительно очистив дефолтный локейшн. а я не могу несохранённый, Delphi его требует сохранить. если не сохранять - не запускает это же не Turbo Pascal 5.x где можно было Compile To Memory Autosave - выключи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:51 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochа я не могу несохранённый, Delphi его требует сохранить. Ariochэто же не Turbo Pascal 5.x где можно было Compile To Memory Так это другое. Экзешник она создаёт разумеется, однако проект не создаётся если не сохранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:57 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
zinpubAutosave - выключи... Оно и без включенного AutoSave работать должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 14:59 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Еще упростил: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Тестировал на Embarcadero® Delphi 10.2 Version 25.0.26309.314, 32 и 64 компиляторы. Invalid pointer operation присутствует в обоих. если присвоение VolatileFN делать после ReadAllText, то бага нет: Код: pascal 1. 2. 3. 4. 5. есть ожидаемый The specified file was not found. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:08 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Вот вам буг, который работает на новом проекте (Сохранять надо в dpr, если просит сохранить при создание проекта) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:12 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
nicholaos, У тебя нет бага, у тебя ошибка об отсутствие директории будет. Файла то нет в такой директории ) А тут баг, который работает вне зависимости, есть ли файл или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:19 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Хотя нет, баг есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:21 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, Ты получаешь ошибку на первом вызове (Test). Поменяй на валидный путь и получишь баг на вызове Test2. Это самый минимальный пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:21 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Сырой компилятор, 23 годика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 15:46 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Arioch, неправильно ссылки считает, сволочь...а 'const' ему кто сказал? у тебя Код: plaintext Код: plaintext или убери const или turn the const-string into a volatile var ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 17:07 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
а компот, с хрена ли??? const - означает, что процедура не изменяет этот параметр. А она изменяет разве??? Так что программа правильная. А вот почему по правильной программе компилятор создает неправильный код - вопрос не ко мне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 17:24 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
nicholaos Код: pascal 1. c:\autoexec.bat ? Он почти везде есть. хотя была у меня XP самовольно перебравшаяся на диск i:.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 17:25 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
nicholaos Ты получаешь ошибку на первом вызове (Test). Поменяй на валидный путь и получишь баг на вызове Test2. Это самый минимальный пример. Пробую на XE2 Путь валидный. Получаю ошибку в Test2 Нормальную ошибку EFileNotFound Строка не разрушается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 17:43 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochc:\autoexec.bat ? Он почти везде есть. Издеваетесь? Его со времён XP нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 18:39 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
alekcvpAriochc:\autoexec.bat ? Он почти везде есть. Издеваетесь? Его со времён XP нет. Все есть. Но не у всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 18:41 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
чччД__alekcvpИздеваетесь? Его со времён XP нет. Все есть. Но не у всех. Ну у тех, кто винды как матрёшки друг-на-друга ставит, у тех есть. Если 7ку и выше с 0 поставить - не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 18:56 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
alekcvpчччД__пропущено... Все есть. Но не у всех. Ну у тех, кто винды как матрёшки друг-на-друга ставит, у тех есть. Если 7ку и выше с 0 поставить - не будет. Ты просто не умеешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 19:03 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Две до плеска простых функции, которые вызывают баг Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 19:45 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
А можно ещё короче записать. Что тоже будет багом Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 19:47 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Глобальные переменные - в локальных переменных зло!!! Вывод, не использовать const ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 19:47 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Да что тут думать? Мы передаём в функцию Один указатель. Потом мы на этот указатель новый указатель ставим. Старый указатель - переданный ранее уже не валидный. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 21:55 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Для окончательного подведения дискуссии, выкладываю самый наглядный пример бага Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2018, 22:47 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, тут бага нет! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 09:56 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, бага компилятора нет - есть бага программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 10:12 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Так проблема в способе передачи const строки в delphi. Когда строка передается как const параметр, происходит передача непосредственно адреса блока памяти, в котором лежит строка, без увеличения счетчика ссылок. Если мы внутри процедуры меняем переменную, которую передали как const параметр (хоть глобальную, хоть поле класса, хоть переданную через другой параметр ка var), значение const параметра может испортится, если счетчик ссылок обнулится. Так что вывод - нельзя менять внутри процедуры переменную, значение которой передано туда же как const параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 10:34 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneТак что вывод - нельзя менять внутри процедуры переменную, значение которой передано туда же как const параметр. const вообще для этого и предусмотрен. А воспроизводящим неплохо бы привести листинги сгенерироованного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 10:57 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
schiBarloneТак что вывод - нельзя менять внутри процедуры переменную, значение которой передано туда же как const параметр. const вообще для этого и предусмотрен. А воспроизводящим неплохо бы привести листинги сгенерироованного кода. Ну как бы... Код: pascal 1. 2. 3. 4. 5. 6. 7. Если мы напишем вызов Test(aa), то после присвоения aa внутри Test значение параметра поломается. const - это про то, что мы не можем напрямую менять arg внутри Test. Про то, что нельзя менять переменную, связанную с const параметром, напрямую нигде в документации кажется не написано (я не нашел), но если задуматься о том, как оно внутри реализовано, то это понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 13:10 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneПро то, что нельзя менять переменную, связанную с const параметром, напрямую нигде в документации кажется не написано (я не нашел). Основные негласные правила программирования: параметры функций . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 14:13 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
nicholaosAriochc:\autoexec.bat У меня нет. у меня на win7 нет, а на win8.1 есть впрочем, на гитхабе я c:\windows\win.ini открывал. Тоже впрочем не 100% панацея - никто не гарантирует существование диска c: nicholaosцели обмануть у меня нет. я никого в обмане и не обвинял, ни тебя (с оооочень другой версией Делфи), ни даже Казанцева (с идентичной). Наоборот мы тут "собираем статистику", чтобы максимально точно определить причины и граничные условия. И - ошибка в Delphi 10.2 которой нет в XE2 на мой вкус будет другим багом. Возможно родственным но другим. Regression. Будь первооткрывателем! ГирлионайльдоГлобальные переменные - в локальных переменных зло! Я знал, что кто-то это зачем-то скажет. Поэтому в моём заглавном посту переменная изначально локальная! Специально так сделано было. Это потом уже упрощатели до глобальной упростили. И были раскритикованы... Arioch TheTWIMC Один иностранец отозвался тут: https://plus.google.com/ AriochThe/posts/WB3toSpAdfA С ним там короткая довольно забавная дискуссия была. Мое текущее мнение, что единственно корректным поведением компилятора былоа бы считать const string отдельным типом данных и увеличивать счётчик при присвоении volatile string -> const string function parameter и отщёлкивать его назад при выходе из функции. А иначе - мы тут пока с рекурсиями игрались, но есть же ещё многопоточность.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:14 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
а компотArioch The, неси дрова в "как я лажанулся" я не пишу комплиятор Дельфи а компот Код: pascal 1. ну так на хрена Дельфи чистит объекты, на которые есть живая ссылка? это косяк Дельфи, очевидный есть ссылка - объект живой а компот Код: pascal 1. передаём валидную переменную то, что Дельфи за каким-то чертом в валидную переменную кладет невалидную ссылку - вопрос к авторам Дельфи, а не к пользователям Дельфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:19 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochИ - ошибка в Delphi 10.2 которой нет в XE2 на мой вкус будет другим багом. У меня в XE2 его код тоже даёт ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:29 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneТак что вывод - нельзя менять внутри процедуры переменную, значение которой передано туда же как const параметр. как будто процедура знает, что именно в неё передается а что потом, процедура не должна трогать переменные, которые может быть в ДРУГОМ ПОТОКЕ передаются констами в другую совсем функцию из другой библиотеки ? Гирлионайльдовыкладываю самый наглядный пример бага На XE2 воспроизвёлся. https://github.com/the-Arioch/XE2_AutoOpenUnit/blob/master/Delphi_String_Bug/Girli_str_2xFree_Minimized.dpr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:41 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochНа XE2 воспроизвёлся. https://github.com/the-Arioch/XE2_AutoOpenUnit/blob/master/Delphi_String_Bug/Girli_str_2xFree_Minimized.dpr у кого есть пароль от их Джиры - закиньте им туда баг c этой демонстрацией пжлст, у меня был только от публичного QC и заводить от приватной Джиры мне лень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:47 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochМое текущее мнение, что единственно корректным поведением компилятора былоа бы считать const string отдельным типом данных и увеличивать счётчик при присвоении volatile string -> const string function parameter и отщёлкивать его назад при выходе из функции. Reiterating.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2018, 16:48 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochМое текущее мнение, что единственно корректным поведением компилятора былоа бы считать const string отдельным типом данных и увеличивать счётчик при присвоении volatile string -> const string function parameter и отщёлкивать его назад при выходе из функции. А иначе - мы тут пока с рекурсиями игрались, но есть же ещё многопоточность....Уберите const - и получите ровно это поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 07:05 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Ariochкак будто процедура знает, что именно в неё передается а что потом, процедура не должна трогать переменные, которые может быть в ДРУГОМ ПОТОКЕ передаются констами в другую совсем функцию из другой библиотеки ? Процедура ничего не знает, программист знает. И да, именно так, если в другом потоке менять переменную, переданную как const, будет тот же эффект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 07:08 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
С другим потоком - это вообще зло обращаться к переменной в тот момент, когда она меняется в другом потоке. Даже если параметр не const строка, в одном потоке счетчик ссылок уменьшается, в другом увеличивается. Есть ненулевой шанс словить проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 07:17 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneПроцедура ничего не знает, программист знает. 1) он не должен знать, есть такие вещи как структурное и объектно-ориентированной приложение. Скть клоторый в том, что когда человек пишет один кусочек программы, он не должен держать в памяти все и каждую другую строчку программы, а должно быть достаточно думать о конкретной задаче 2) ты никогда не использовал чужие библиотеки? всю RTL дельфи ты самолично с нуля переписал? нет, конечно, в школе, когда программа занимает максимум два экрана и пишется одним человеком - там да, там ты в любую секунду помнишь каждую строчку и можешь заниматься микроменеджментом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 12:04 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneУберите const - и получите ровно это поведение. очевидно же, что нет я получу ненужный мне риск опечататься (или вернуться к доработке функции месяц спустя) и изменить переменную, разрушив логику окончания функции. кроме того я получу отключение оптимизации всех вызовов ИЗ этой функции, а они для многопроцессорных систем довольно затратные. Сколько там уже потоко у тред-риппера, 64 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 12:06 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneС другим потоком - это вообще зло обращаться к переменной в тот момент, когда она меняется в другом потоке а это просто неправда точнее это сферическая правда в вакууме к этой теме вообще никак не относящаяся изменяется переменная Simulated_Call обращение идёт к переменной FileName никто в этой теме никогда не обращался к той переменной, которая изменяется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 12:13 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Это не проблема в конкретной версии компилятора, это концептуальная проблема передачи const sting параметров - при этом не создается новая строковая переменная, а образуется алиас. Если в какой-то версии компилятора нет падения с av - это еще не говорит об отсутствии обращения к освобожденной памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 13:40 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
BarloneЭто не проблема в конкретной версии компилятора ясень пень, тут же тестировали на куче версий с xe2 до 10.2 - во всех одна проблема Barloneверсии компилятора нет падения с av - это еще не говорит об отсутствии обращения к освобожденной памяти. само собой но баги use after free и double-free - это разные баги хотя (и я с самого начала сказал) - родственные (вытекающие из общей недопроработки концепции) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:19 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Barloneнет падения с av кстати, AV тут и не было, было IMO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:20 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
AriochAriochНа XE2 воспроизвёлся. https://github.com/the-Arioch/XE2_AutoOpenUnit/blob/master/Delphi_String_Bug/Girli_str_2xFree_Minimized.dpr у кого есть пароль от их Джиры - закиньте им туда баг c этой демонстрацией пжлст, у меня был только от публичного QC и заводить от приватной Джиры мне лень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:27 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Можно просто проверить счетчик ссылок: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. после присваивания глобальной переменной у связанного с ней параметра он обнуляется - а значит память под старое значение уже освобождена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:52 |
|
||
|
XE2 string double-free
|
|||
|---|---|---|---|
|
#18+
Но это не баг, это фича. Просто всегда изменяя в процедуре значение нелокальной переменной, надо задумываться о том, а что будет, если эта переменная связана с var/const параметром процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2018, 14:55 |
|
||
|
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/search_topic.php?author=OrcSoul&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
197ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
110ms |
get tp. blocked users: |
1ms |
| others: | 491ms |
| total: | 870ms |

| 0 / 0 |
