Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2011, 13:15   #1
Dreanks
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 28
По умолчанию access violation после завершения работы процедуры

процедура чтения из файла
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i,lenlogs:integer;
    len:word;
begin
  assignfile(logf,'data.log');
  reset(logf);
  blockread(logf,len,sizeof(word));
  lenlogs:=len;
  for i:=0 to lenlogs-1 do
    begin
      blockread(logf,len,sizeof(word));
    end;
  closefile(logf);
end;
читает все нормально, а после end; вылетает ошибка
подскажите в чем тут дело
Dreanks вне форума Ответить с цитированием
Старый 15.10.2011, 13:37   #2
Tony Parker
Пользователь
 
Регистрация: 19.12.2010
Сообщений: 52
По умолчанию

Ошибка при обращении к памяти. В приведенном коде это может вызвать только blockread().

Какие данные содержит файл data.log?
(Файл бинарный, не содержит "4 1 1 1 1", а содержит числа записанные подряд по 2 байта (слово) каждое?)
AllSuccess1.ru - каталог полезных курсов.
Tony Parker вне форума Ответить с цитированием
Старый 15.10.2011, 13:42   #3
Dreanks
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 28
По умолчанию

вот запись файла
Код:
len:=length(logs);
  blockwrite(logf,len,sizeof(word));
  for i:=0 to length(logs)-1 do
    begin
      len:=length(logs[i].name);
      blockwrite(logf,len,sizeof(word));
    end;
чтение проходит нормально
ошибка вылетает после end; в конце процедуры чтения
Dreanks вне форума Ответить с цитированием
Старый 15.10.2011, 13:54   #4
Tony Parker
Пользователь
 
Регистрация: 19.12.2010
Сообщений: 52
По умолчанию

Цитата:
Функции открытия файла Reset и Rewrite имеют дополнительный параметр, который указывает размер записи, если этот параметр не указан, то используется значение по умолчанию в 128 байт, кстати, это часто является одной из причин для возникновения ошибок, забываем указать этот размер, а при работе считаем, что работаем с байтом. Что бы работать с файлом, как с байтом, надо или установить размер записи в 1 или использовать типизированный файл следующего типа - file of byte.
Попробуй так: Reset(F, 1);
AllSuccess1.ru - каталог полезных курсов.
Tony Parker вне форума Ответить с цитированием
Старый 15.10.2011, 14:02   #5
Dreanks
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 28
По умолчанию

спасибо
помогло
Dreanks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена закрытия консольного окна после завершения работы приложения FeloS Общие вопросы C/C++ 21 25.02.2011 16:34
После выгрузки библиотеки Access Violation evgeso Общие вопросы Delphi 0 13.02.2011 05:27
Вызов процедуры и access violation nintser Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 15.11.2010 20:57
Процесс после завершения работы с программой остается в диспетчере зедач с++ builder romec1 Помощь студентам 0 09.06.2010 14:07
Перехват завершения работы ОС vynt Win Api 7 19.05.2008 08:59