Главная страница
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.013 c
9-60008
fsn
2002-12-19 01:04
2003.06.19
DELPHI X


4-60456
LIK
2003-04-19 19:16
2003.06.19
TreeView


1-60257
Alex-21
2003-06-04 21:20
2003.06.19
Virtual Key Сodes


14-60322
Кен
2003-05-27 02:09
2003.06.19
Где взять документацию по DelphiODE (динамик энджин)? По примерам


4-60477
Sodom
2003-04-18 11:42
2003.06.19
Создание контекстного меню.