Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.19;
Скачать: CL | DM;

Вниз

Работа с файлами   Найти похожие ветки 

 
Женя   (2010-09-22 19:24) [0]

Помогите разобраться пожалуйста. пишу небольшую программу,
и тут непонятная ошибка. Выскакивает при завершении процедуры (после сообщения "проверка")

procedure Write;
var x,s:string; i,j:integer; k:integer;
begin
AssignFile(f1,Form1.Edit1.Text);
Reset(f1);
SetLength(fp,Form1.Memo1.Lines.Count+1);

for k:=0 to Form1.Memo1.Lines.Count-1 do begin
 ShowMessage(IntToStr(k));
AssignFile(f2,Form1.Memo1.Lines.Strings[k]);
 ShowMessage(Form1.Memo1.Lines.Strings[k]);
Reset(f2);
seek(f1,FileSize(f1));

fp[k].size:=FileSize(f2);
fp[k].Lst:=FileSize(f1);

While not eof(f2) do
begin
 BlockRead(f2,x,1);
 BlockWrite(f1,x,1);
{  inc(i);
  if i=10 then begin
   BlockWrite(f1,x,1);
   i:=0;
  end;  }
end;
 CloseFile(f2);
{if i<>0 then BlockWrite(f1,x,1);}
 fp[k].Lend:=FileSize(f1);
end;

for j:=0 to Form1.Memo1.Lines.Count-1 do begin
 s:="<~b><s>"+IntToStr(fp[j].size)+"<st>"+IntToStr(fp[j].Lst)+"<e>"+IntToStr(fp[j].Lend)+"<~e>";
 for i:=1 to Length(x)-1 do BlockWrite(f1,x[i],sizeof(char));
                                       end;
CloseFile(f1);
ShowMessage("проверка");
end;


 
Женя   (2010-09-22 19:30) [1]

пишет что не в ту область памяти лезу ..


 
Anatoly Podgoretsky ©   (2010-09-22 19:45) [2]

> Женя  (22.09.2010 19:30:01)  [1]

Так и пишет, а случайно не твой ли это перевод?


 
mike   (2010-09-22 21:34) [3]


> случайно не твой ли это перевод?

Небось beyond the end of the file


 
Женя   (2010-09-22 22:00) [4]

>>>>Access violation at address 0000000.Read of address 00000000.
причем все действия выполняются правильно (файл f1 пополняется)


 
Германн ©   (2010-09-22 22:28) [5]


> Женя   (22.09.10 22:00) [4]

Во-первых процедура Reset имеет два параметра. И хоть второй необязательный про него настоятельно рекомендуется прочитать в справке.


 
sniknik ©   (2010-09-22 22:32) [6]

> BlockRead(f2,x,1);


 
RWolf ©   (2010-09-23 01:43) [7]

прежде чем читать блок данных в буфер, надо выделить под него память.
строка x нигде не инициализировалась, так что буфер не создан &#8594; имеем AV.


 
Германн ©   (2010-09-23 01:57) [8]

Вообще-то в сабже ошибок столько, что я могу лишь дать ссылку на лицей http://www.delphikingdom.com/lyceum/seminar.asp?ID=2


 
han_malign   (2010-09-23 08:27) [9]


> строка x нигде не инициализировалась, так что буфер не создан
> &#8594; имеем AV.

младший байт ссылки на строку x инициализирован BlockRead(f2,x,1) - при выходе из процедуры compiler magic пытается освободить ненулевую ссылку на строку...

З.Ы. для всех динамических магических переменных компилятор генерирует код инициализации в преамбуле функции и код "финализации" в неявной секции try finally...


 
Женя   (2010-09-23 15:43) [10]

спасибо ;)



Страницы: 1 вся ветка

Текущий архив: 2010.12.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1285421559
Первокурсница
2010-09-25 17:32
2010.12.19
Одна кнопка работает, другая нет (добавление записей в БД)


15-1283967501
Ega23
2010-09-08 21:38
2010.12.19
Читал Лурк про Веб 1.0


11-1226657574
Xenus
2008-11-14 13:12
2010.12.19
Timage или что то подобное


15-1283804974
Юрий
2010-09-07 00:29
2010.12.19
С днем рождения ! 7 сентября 2010 вторник


2-1285399733
faiwer
2010-09-25 11:28
2010.12.19
Создание формы