Текущий архив: 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.45 MB
Время: 0.012 c