Re[13]: Странный баг Delphi XE8
От: rudzuk  
Дата: 30.08.23 17:41
Оценка:
Здравствуйте, Khimik, Вы писали:

K> R>
result:=TObject(fsubitems[index]) as tfragmentnode;


K> Можете объяснить, в чём разница с tfragmentnode(fsubitems[index])?


Если в списке окажется объект другого класса, не являющегося потомком запрашиваемого, то вариант с оператором as вызовет исключение и не даст испортить память. Если есть гарантия, что список содержит именно этот класс, то использовать as не обязательно.

K> Я ещё раз посмотрел — да если скомпилировать в Win32, то sizeof(pointer) и sizeof(tobject) будут по 4 байта, а если в Win64, то по 8 байт. Даже если тут нет явной ошибки, то явно надо с такими вещами быть осторожнее.


В Delphi бъекты являются типами-указателями (см. букварь). Поэтому опасности в подобном преобразовании нет, если есть гарантия, что за указателем объект.

K> R>А inputbuf чему равен?


K> Ну не нулю, это размер строки, записанный в файле.


Тогда проверь чему равна длина дин.массива сразу после того, как делаешь ему SetLength.
avalon/3.0.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.