Здравствуйте, 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.