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

Вниз

Проблема с динамическим массивом   Найти похожие ветки 

 
DeScriptor ©   (2003-06-05 21:39) [0]

Я совсем еще зеленый программсит, ничего, почти, не умею, поэтому решил прибегнуть к помощи знающих людей. Проблема следующая: У меня есть динамический массив, в который я собираюсь читать блок из файла процедурой BlockRead; после прочтения первого блока, размер массива неопределим, файл не закрывается, содержимое массива - пусто! Если я делаю все то же самое, но в статический массив, все работает. Почему так?
Вот кусочек кода, в котором производятся вышеописанные действия:

type FormatSett = record
ContentType,TableSizeFormat:string;
HeaderLen,TableField:integer;
end;

var
MainWin: TMainWin;
BigFormat:FormatSett;

procedure ExtractLoop();

implementation

{$R *.dfm}

procedure ExtractLoop();
var
SourceFile,DestFile:file;
ReadBuff: array of byte;
i:integer;
begin
with MainWin do begin
AssignFile(SourceFile,OpenSrc.FileName);
reset(SourceFile,1);
SetLength(ReadBuff,BigFormat.HeaderLen);
BlockRead(SourceFile,ReadBuff,BigFormat.HeaderLen);
closefile(SourceFile);
end;
end;


 
VMcL ©   (2003-06-05 21:46) [1]

BlockRead(SourceFile,Pointer(ReadBuff)^,BigFormat.HeaderLen);


 
Forester ©   (2003-06-05 21:54) [2]

Pointer(ReadBuff)^ в ответе выше можно заменить на ReadBuff[0]
(те же яйца - вид сбоку ;) )


 
DeScriptor ©   (2003-06-06 07:11) [3]

Всем огромное спасибо!!! Сработало! =) Есть, правда у меня подвопрос: а почему оно так работает? Что означает Pointer(ReadBuff)^, он же ReadBuff[0]? Заранее еще одно спасибо! =))


 
MBo ©   (2003-06-06 07:16) [4]

в процедуре Buffer описан как var - это означает, что компилятор берет адрес использованной переменной, и рассматривает его как адрес начала блока, куда надо писать. Просто ReadBuff - динамичесий массив - суть указатель, и в твоем исходном варианте используется адрес переменной - этого указателя, а не то, куда он указывает.


 
DeScriptor ©   (2003-06-06 17:52) [5]

Понятно, я так и подозревал! Еще раз огромное спасибо! А то я с этими указателями немного не разобрался: по моим представлениям они указывают на адрес переменной в памяти, но, глядя на множество примеров я теряюсь: указатели используются везде...



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
14-60333
Начинающий_
2003-06-02 05:21
2003.06.19
Срочно алгоритм сортировки списка


3-60022
Eugene Suprun
2003-05-27 12:31
2003.06.19
Люди, HELP, как побороть глюки QuickReport a - Access Violation


14-60397
YonnyN
2003-06-01 02:24
2003.06.19
Странное поведение диалоговых окон под XP


1-60189
namor
2003-06-03 14:14
2003.06.19
Изображение на Десктопе


1-60104
Seldon
2003-06-04 19:18
2003.06.19
Вызов программы и т.д.