Ещё одно отличие от Дельфи. Подводные грабли.

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

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

Ещё одно отличие от Дельфи. Подводные грабли.

Сообщение Cheb » 03.06.2007 16:08:28

Во Фри Паскале динамические массивы хранятся так:
по смещению -8 - reference count
по смещению -4 - значение high (длина - 1)

В Дельфи:
по смещению -8 - reference count
по смещению -4 - длина массива

и если лазить ручками, то можно на этом капитально погореть, как со мной и случилось. :oops:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение Mirage » 04.06.2007 12:40:26

А зачем лазить туда ручками? Для длины есть Length/SetLength. А если трогать ручками refcount то не погореть можно только если повезет.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение Cheb » 04.06.2007 16:29:55

Ну, мне понадобилась процедура создающая дин. массив произвольного типа, с произвольным число элементов. Причём, всё, что известно о типе - это размер элемента. Редко такое надобится, согласен, но всё же бывает.

Refcount имеющегося массива трогать - это, согласен, безумие. А при создании я егго в единицу всегда выставлял.

Или вы в ассемблерной процедуре захотите массив прочитать. Тоже напоретесь.

Или массив в качестве параметра в DLL'ку передадите, а она другим компилятором откомпилирована.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение shade » 04.06.2007 16:38:24

Cheb писал(а):Или вы в ассемблерной процедуре захотите массив прочитать. Тоже напоретесь.

В ассемблерной процедуре можно вызвать FPC_DYNARRAY_LENGTH, ровно как и FPC_DYNARRAY_HIGH
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


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

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

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

Рейтинг@Mail.ru