Главная страница
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.013 c
3-1187346916
Bless
2007-08-17 14:35
2007.12.23
Как правильно "гасить" MSSQL-ошибку с кодом 266


2-1196208395
Кевларвестов Семен
2007-11-28 03:06
2007.12.23
Чтение данных с поврежденного CD


15-1195934111
Черный Шаман
2007-11-24 22:55
2007.12.23
Гы, а у нас в городе 2 мера.


2-1195984219
m-kirill-2003
2007-11-25 12:50
2007.12.23
функция ord()


2-1196447304
deras
2007-11-30 21:28
2007.12.23
Как вернуть прежнее значение в ячейку грида?