Наследованые классы и динамические массивы - > Баг

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

SovNarKom
постоялец
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]
Контактная информация:

Сообщение SovNarKom »

Какой лазарус?! (в смысле версия)
Ключи компиляции?
Uniser
новенький
Сообщения: 46
Зарегистрирован: 13.05.2005 23:13:57
Откуда: Украина, Полтава

Сообщение Uniser »

Всё по умолчанию.
Запихнул в lpr-файл и прошёл по шагам: порядок!
SovNarKom
постоялец
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]
Контактная информация:

Сообщение SovNarKom »

Хммм... если в оконном приложении - всё нормально... а в консольном нет...
Mirage
энтузиаст
Сообщения: 880
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Может я не понял, а чем вопрос? Строчка
SSS.A:=TBaseC.Create;
Создает экземпляр класса TBaseC, который не имеет полей, объявленных у TOneClass (являющегося расширением TBaseC). И поэтому насильственное приведение типов (что само по себе нехорошая практика) и попытка использования несуществующих полей (это в обоих примерах есть), должна приводить к краху.
А насчет того, что работает в Дельфи или еще где - не обольщайся. В один прекрасный момент данные, записываемые в невыделенную область памяти, наложатся на другие нужные данные и ты будешь иметь мистические глюки, неделями пытаясь найти их там, где их нет.
SovNarKom
постоялец
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]
Контактная информация:

Сообщение SovNarKom »

Mirage
Дык ыть ясен пончик. Uniser это давно сказал, интересно было почему в Delphi работает, но и тут всё теперь ясно. :P

Скажи пожалуйста, что по второму вопросу думаешь? ;)
Mirage
энтузиаст
Сообщения: 880
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Что за второй вопрос? Ты про runtime error при обращении к конструкции вида

pTArr = ^TArr;
TArr = Array [0..0] of Byte;

чтоли?

Дельфи 6 на такое, при включенном range checking, выдает range check error (часто еще при компиляции). Что я лично считаю правильным. Объявляй так:

pTArr = ^TArr;
TArr = Array [0..$FFFFFF] of Byte;
SovNarKom
постоялец
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]
Контактная информация:

Сообщение SovNarKom »

Mirage
В том то и дело, что не range check error... был...
дело было в параметрах компилятора... никак не могу найти в каких <_<
Пересоздал проект - всё ОК.

TArr = Array [0..$FFFFFF] of Byte; - конечно правильнее.
Ответить