Главная страница
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.008 c
2-1285653774
Jacksotnik
2010-09-28 10:02
2010.12.19
Не могу понять в чем проблема


15-1284292953
sniknik
2010-09-12 16:02
2010.12.19
Отключается копирование в буфер...


15-1284369868
Дмитрий С
2010-09-13 13:24
2010.12.19
rad 2010 и 2007 будут жить на одном компе?


15-1283874133
И. Павел
2010-09-07 19:42
2010.12.19
В честь чего такой гугл сегодня?


2-1285224640
Сергей
2010-09-23 10:50
2010.12.19
подсказка в DBGrid