Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.01.2010, 20:44   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию SizeOf выдает значение на порядок меньше.

Уже все перепробовал. Похоже, где что-то упускаю.
Код:
Const
   DNA_CELL = 50;

Type
  TForce = Record
        Hor : ShortInt;
        Ver : ShortInt;
     End;

  TVector = Record
     X     : SmallInt;
     Y     : SmallInt;
     Force : TForce;
  End;

  TChromosomes = Record
     Left  : Array of Byte;
     Right : Array of Byte;
  End;

  TDNA   = Record
     Chromosomes : TChromosomes;
  End;

  TNucleus = Record
      Cover : Array[0..7] of TVector;
      DNA   : TDNA;
  End;

...
Nucleus       : TNucleus;
...
SONucleus     : SmallInt;
...
SetLength(Nucleus.DNA.Chromosomes.Left , DNA_CELL);
SetLength(Nucleus.DNA.Chromosomes.Right, DNA_CELL);
SONucleus     := SizeOf(Nucleus); // 56!!!!
50 байт одной хромосомы + 50 байт второй хромосомы + еще дофига байт от векторов = 56???

P.S. Больше так не буду
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 15.01.2010 в 20:56.
Alex Cones вне форума
Старый 15.01.2010, 21:06   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

6*8+8=56 все верно

обьюсню последнее 8
Код:
     Left  : Array of Byte;
     Right : Array of Byte;
это два указателя на массив байтов.(4*2)
не забывай что есть дин массив.

если надо чтоб массив входил в структуру то используй безразмерный массив
Код:
     Left  : Array[0..0] of Byte;
     Right : Array[0..0] of Byte;
но в твоем контексте это не возможно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.01.2010 в 21:12.
Пепел Феникса вне форума
Старый 15.01.2010, 21:14   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ааааа!!! Точно! Спасибо! Но как мне теперь быть с ДНК? Записывать побайтно в цикле? Я тогда вообще не пойму - мне нет нужды записывать эти два указателя? Только размерность массивов?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 15.01.2010, 21:19   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
мне нет нужды записывать эти два указателя?
это ко мне вопрос?

мне кажется вам надо сохранить значение этих массивов...
как делал бы я..4 байта длинна(читаем её или пишем) массива.потом читаем/пишем этот массив (довольно просто...ставим массив длину(если читаем) и пишем/читаем ставля в поток первый элемент(или адрес первого элемента для BlockRead) и далее второй так же)


ЗЫ: похоже не редко помогаю
постучись в асю если есть желание: 446843180

ЗЗЫ если что могу дать примеры кода...но я люблю оформлять как класс для работы с типом файла(сам пишу сейчас класс подобный...структура тоже не проста)..но я обычно пишу для потоков)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.01.2010 в 21:22.
Пепел Феникса вне форума
Старый 15.01.2010, 21:24   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
ЗЫ: похоже не редко помогаю
При демократии всегда так
Цитата:
постучись в асю: 446843180
Стучу.

P.S. Тему можно в клоуз.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] | Порядок изучения Lemo Свободное общение 7 06.12.2009 19:52
Z-порядок расположения объектов. Alex Cones Мультимедиа в Delphi 1 19.04.2009 14:08
сумма всех начальных членов ряда, значение которых не меньше заданного числа e, 0<e<1 Арчи Помощь студентам 2 20.12.2008 12:39
порядок установки драйверов photozaz Компьютерное железо 3 21.11.2008 16:46
Порядок OgE®_M@G Microsoft Office Excel 4 10.08.2008 01:45