Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
ВнизРабота с файлами Найти похожие ветки
← →
Женя (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 нигде не инициализировалась, так что буфер не создан → имеем 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 нигде не инициализировалась, так что буфер не создан
> → имеем AV.
младший байт ссылки на строку x инициализирован BlockRead(f2,x,1) - при выходе из процедуры compiler magic пытается освободить ненулевую ссылку на строку...
З.Ы. для всех динамических магических переменных компилятор генерирует код инициализации в преамбуле функции и код "финализации" в неявной секции try finally...
← →
Женя (2010-09-23 15:43) [10]спасибо ;)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c