Когда указываю этот массив в своей процедуре, то возникает ошибка 200 на процедуре BlockRead,
а если указать масссив в основной программе, ошибки нет. Что не так?
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| Билли Боб |
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Когда указываю этот массив в своей процедуре, то возникает ошибка 200 на процедуре BlockRead,
а если указать масссив в основной программе, ошибки нет. Что не так? |
![]() ![]() |
| IUnknown |
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата Вот так работает правильно: Тебе очень повезло. На самом деле происходит вот что:Цитата BlockRead reads Count or fewer records from the file F into memory, starting at the first byte occupied by Buf. То есть, первый прочитанный байт размещается в b[0], а остальные 399 - следом за ним, где бы это ни было, и что бы там не находилось - оно будет испорчено. Проверь: размести следом за глобально описанной переменной b еще какой-нибудь буфер, и посмотри, в момент чтения из файла, как значения его элементов изменятся, хотя ты фактически читаешь в b. То, что программа не вылетает сразу при глобальном описании буфера - это только положение звезд на небе и размеры Большого Красного Пятна на Юпитере тебя спасают Если серьезно - нужно, чтобы в буфер помещалось необходимое количество данных, то есть, размер буфера в твоем случае должен быть не меньше, чем (400 блоков * 1 байт = размер одного блока) = 400 байт. У тебя буфер может содержать один байт, с индексом 0. Или ты думал, что при задании 0 .. 0 выделится столько, сколько нужно? Нет, не выделится, обеспечить достаточный размер буфера - проблема программиста, BlockRead не проверяет достаточно ли места в буфере, и не выдает никакой ошибки. Равно как и Range Check здесь бессилен... |
Билли Боб Массив [0..0] ов байт 17.09.2011 6:41
IUnknown Показывай код процедуры, что-то там не так. Вот та… 17.09.2011 11:59
Билли Боб Вот так работает правильно:
var
b: array of b… 17.09.2011 19:41
Билли Боб
Как раз так и думал :)
Но все же при глобально… 17.09.2011 20:36
IUnknown Тебе только кажется :) Даже если оно и работает - … 17.09.2011 20:48
Билли Боб да, учитель! )) 17.09.2011 20:50![]() ![]() |
|
Текстовая версия | 17.02.2026 16:55 |