Какой лазарус?! (в смысле версия)
Ключи компиляции?
Наследованые классы и динамические массивы - > Баг
Модератор: Модераторы
-
Mirage
- энтузиаст
- Сообщения: 880
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Может я не понял, а чем вопрос? Строчка
SSS.A:=TBaseC.Create;
Создает экземпляр класса TBaseC, который не имеет полей, объявленных у TOneClass (являющегося расширением TBaseC). И поэтому насильственное приведение типов (что само по себе нехорошая практика) и попытка использования несуществующих полей (это в обоих примерах есть), должна приводить к краху.
А насчет того, что работает в Дельфи или еще где - не обольщайся. В один прекрасный момент данные, записываемые в невыделенную область памяти, наложатся на другие нужные данные и ты будешь иметь мистические глюки, неделями пытаясь найти их там, где их нет.
SSS.A:=TBaseC.Create;
Создает экземпляр класса TBaseC, который не имеет полей, объявленных у TOneClass (являющегося расширением TBaseC). И поэтому насильственное приведение типов (что само по себе нехорошая практика) и попытка использования несуществующих полей (это в обоих примерах есть), должна приводить к краху.
А насчет того, что работает в Дельфи или еще где - не обольщайся. В один прекрасный момент данные, записываемые в невыделенную область памяти, наложатся на другие нужные данные и ты будешь иметь мистические глюки, неделями пытаясь найти их там, где их нет.
-
Mirage
- энтузиаст
- Сообщения: 880
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Что за второй вопрос? Ты про runtime error при обращении к конструкции вида
pTArr = ^TArr;
TArr = Array [0..0] of Byte;
чтоли?
Дельфи 6 на такое, при включенном range checking, выдает range check error (часто еще при компиляции). Что я лично считаю правильным. Объявляй так:
pTArr = ^TArr;
TArr = Array [0..$FFFFFF] of Byte;
pTArr = ^TArr;
TArr = Array [0..0] of Byte;
чтоли?
Дельфи 6 на такое, при включенном range checking, выдает range check error (часто еще при компиляции). Что я лично считаю правильным. Объявляй так:
pTArr = ^TArr;
TArr = Array [0..$FFFFFF] of Byte;
