Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
14-60339
Udjin
2003-05-31 00:18
2003.06.19
13 билет на экзамене


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


14-60404
Думкин
2003-06-03 12:42
2003.06.19
Цивилизация и .... мы.


14-60388
Ru
2003-06-02 14:44
2003.06.19
Критика христианства


11-60099
Alexander
2002-09-25 16:06
2003.06.19
Эквивалентны ли функции StrIComp из StrUtils и StrComp из KOL?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский