Когда указываю этот массив в своей процедуре, то возникает ошибка 200 на процедуре BlockRead,
а если указать масссив в основной программе, ошибки нет. Что не так?
Массив [0..0] ов байт |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Массив [0..0] ов байт |
Билли Боб |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Когда указываю этот массив в своей процедуре, то возникает ошибка 200 на процедуре BlockRead,
а если указать масссив в основной программе, ошибки нет. Что не так? |
IUnknown |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Показывай код процедуры, что-то там не так. Вот такая процедурка:
procedure p(var f : file);совершенно нормально отрабатывает, безо всяких ошибок. Да, файл открывался через reset(f, 1); |
Билли Боб |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Вот так работает правильно:
А вот так выдает ошибку, теперь уже File not found:
Добавлено через 8 мин. Еще заметил, что если указать меньше 260 записей, то ошибки не возникает. |
IUnknown |
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 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 здесь бессилен... |
Билли Боб |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
Цитата Или ты думал, что при задании 0 .. 0 выделится столько, сколько нужно? Как раз так и думал Но все же при глобальном описании переменной никаких проблем не возникает. У меня там процедура вывода bmp, и рисунки выводятся верно, никаких искажений не было, странно. |
IUnknown |
Сообщение
#6
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата Но все же при глобальном описании переменной никаких проблем не возникает. Тебе только кажется Даже если оно и работает - так делать нельзя, потому что перестать работать может в любую секунду.Цитата У меня там процедура вывода bmp, и рисунки выводятся верно, никаких искажений не было, странно. Процедуры - ни при чем, это сегмент кода. А глобальные данные располагаются в сегменте данных.Вот, кстати: Цитата А вот так выдает ошибку, теперь уже File not found: Теперь понимаешь причину ошибки? |
Билли Боб |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 47 Пол: Мужской Репутация: 0 |
да, учитель! ))
|
Текстовая версия | 26.04.2024 7:38 |