Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
14-60381
Тих
2003-06-01 13:33
2003.06.19
_alloca - аналог в Delphi или-какая С runtimeDLL её экспортирует?


1-60164
avlan
2003-06-07 06:40
2003.06.19
Ширина ячейки в StatusBar


14-60421
Fredericco
2003-06-03 17:47
2003.06.19
Вопрос про корректность кода.


1-60264
SiJack
2003-06-06 09:18
2003.06.19
Срочный вопрос !!!! Как получить путь к Program Files ?


1-60222
Rel_
2003-06-05 15:12
2003.06.19
TTreeNode




   Наверх