Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 нигде не инициализировалась, так что буфер не создан &#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
15-1284018704
12
2010-09-09 11:51
2010.12.19
оцените изврат


15-1283525303
Marser
2010-09-03 18:48
2010.12.19
Спустя восемь лет


15-1283792261
Делфиец
2010-09-06 20:57
2010.12.19
Байкал на Десктоп


15-1284097942
Palladin
2010-09-10 09:52
2010.12.19
Opera 10.62


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский