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

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

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

Сообщение SovNarKom » 27.06.2005 12:13:18

Какой лазарус?! (в смысле версия)
Ключи компиляции?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Uniser » 27.06.2005 13:13:33

Всё по умолчанию.
Запихнул в lpr-файл и прошёл по шагам: порядок!
Uniser
новенький
 
Сообщения: 46
Зарегистрирован: 13.05.2005 23:13:57
Откуда: Украина, Полтава

Сообщение SovNarKom » 27.06.2005 14:51:15

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

Сообщение Mirage » 27.06.2005 17:33:57

Может я не понял, а чем вопрос? Строчка
SSS.A:=TBaseC.Create;
Создает экземпляр класса TBaseC, который не имеет полей, объявленных у TOneClass (являющегося расширением TBaseC). И поэтому насильственное приведение типов (что само по себе нехорошая практика) и попытка использования несуществующих полей (это в обоих примерах есть), должна приводить к краху.
А насчет того, что работает в Дельфи или еще где - не обольщайся. В один прекрасный момент данные, записываемые в невыделенную область памяти, наложатся на другие нужные данные и ты будешь иметь мистические глюки, неделями пытаясь найти их там, где их нет.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение SovNarKom » 27.06.2005 17:37:59

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

Скажи пожалуйста, что по второму вопросу думаешь? ;)
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Mirage » 27.06.2005 18:50:16

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

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

чтоли?

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

pTArr = ^TArr;
TArr = Array [0..$FFFFFF] of Byte;
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение SovNarKom » 27.06.2005 20:08:55

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

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

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru