Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Определение размера динамического массива   Найти похожие ветки 

 
Petrovich   (2007-11-27 21:50) [0]

Давно не писал на паскале, но вот снова его вспоминаю.
Использую Дельфи 6

Ниже - простенькая процедура. Очень прощшу объяснить в чем ошибка.

Требуется:
А) Узнать размер созданного динамического массива,
Б) а затем данные из этого массива записать в файл. Причем не используя поток (Stream)

SetLength(testarray,32768);

For actual:=0 to 32767 do testarray[actual]:=$E5;

actual:=SizeOf(testarray);

// var actual : integer.
// Но SizeOf возвращает размер указателя на массив, а не сам размер массива. В тоже время SizeOf(testarray^) выдает ошибку.

AssignFile(F,"test.dat");

// Var F : File;

Rewrite(F,1);
BlockWrite(F,testarray,(actual));
// BlockWrite Здесь не работает.  Почему? В чем ошибка?

CloseFile(F);


 
Юрий Зотов ©   (2007-11-27 22:02) [1]

> Petrovich   (27.11.07 21:50)

Ошибка в том, что переменная типа "динамический массив" - это неявный указатель. Его размер, естественно, 4.

> А) Узнать размер созданного динамического массива,

Length(testarray) - длина массива в его элементах;

Length(testarray) * SizeOf(тип_элементов) - длина массива в байтах (лучше объявить его с атрибутом packed).

> Б) данные из этого массива записать в файл. Причем не используя поток

@testarray[0] - адрес первого (т.е., нулевого) элемента массива.


 
Anatoly Podgoretsky ©   (2007-11-27 22:07) [2]

> Petrovich  (27.11.2007 21:50:00)  [0]

Не SizeOf, а Length
А запись testarray[0]



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
2-1196143990
dumka
2007-11-27 09:13
2007.12.23
Запросы


2-1196410006
IvanB
2007-11-30 11:06
2007.12.23
ООП


2-1195909606
Servelat
2007-11-24 16:06
2007.12.23
Приведение типов


15-1195658140
oldman
2007-11-21 18:15
2007.12.23
Похоливарим на тему Интернета?


2-1196249888
Alex_C
2007-11-28 14:38
2007.12.23
Пересекаются ли две TRect области