Информация об изменениях

Сообщение Re[9]: Странный баг Delphi XE8 от 30.08.2023 9:35

Изменено 30.08.2023 9:37 swame

Re[9]: Странный баг Delphi XE8
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, swame, Вы писали:


S>>но ссылка сдохла, положил


S>>https://disk.yandex.ru/d/k4mMp2MCe2c4sQ


K>Спасибо, я включил CheckHeapForCorruption, потом FullDebugMode, запустил мою программу и ошибка не сработала. Возможно у меня не этот тип ошибки.

K>Вчера я почистил старые утечки памяти в моей программе и неожиданно ошибка, с которой я начал эту тему, перестала срабатывать.
K>Ещё я заметил, что позавчера с Win32 версией тоже срабатывала ошибка range check error на другом функционале программы, т.е. не уверен что проблема именно с преобразованием типов. Но вообще я только сейчас понял, что надо более осторожно переводить код Delphi 7 на Delphi XE 8.

K>Прошу кого-нибудь ответить всё-таки, какие ошибки возможны, если использовать скобки вместо as при приведении типов.


Ну например ты используешь старый недженериковый TList для хранения объектов определенного класса.
Потом поменял тип хранящихся там объектов, например вместо класа теперь там контейнер, включающий этот класс.
НО в каком-то месте кода забыл поправить.
При обращении приводишь объект скобочками , и меняещь значение поля. В этом случае не будет ни ошибок компиляции,
а может и не быть AV, но где-то произвольно запортились данные. Такие ошибки сложно находить.
Если же класс из TLISt получаешь через as то сразу возникнет исключение, легко найти ошибку.
Re[9]: Странный баг Delphi XE8
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, swame, Вы писали:


S>>но ссылка сдохла, положил


S>>https://disk.yandex.ru/d/k4mMp2MCe2c4sQ


K>Спасибо, я включил CheckHeapForCorruption, потом FullDebugMode, запустил мою программу и ошибка не сработала. Возможно у меня не этот тип ошибки.

K>Вчера я почистил старые утечки памяти в моей программе и неожиданно ошибка, с которой я начал эту тему, перестала срабатывать.
K>Ещё я заметил, что позавчера с Win32 версией тоже срабатывала ошибка range check error на другом функционале программы, т.е. не уверен что проблема именно с преобразованием типов. Но вообще я только сейчас понял, что надо более осторожно переводить код Delphi 7 на Delphi XE 8.

K>Прошу кого-нибудь ответить всё-таки, какие ошибки возможны, если использовать скобки вместо as при приведении типов.


Ну например ты используешь старый недженериковый TList для хранения объектов определенного класса.
Потом поменял тип хранящихся там объектов, например вместо класа теперь там контейнер, включающий этот класс.
НО в каком-то месте кода забыл поправить.
При обращении приводишь объект скобочками , и меняещь значение поля. В этом случае не будет ни ошибок компиляции,
а может и не быть AV, но где-то произвольном месте памяти запортились данные. Такие ошибки сложно находить.
Если же класс из TLISt получаешь через as то сразу возникнет исключение, легко найти ошибку.