Есть два юнита.. сответственно в одном описан класс в другом идет его вызов. привожу их коды
Код | unit Unit2;
interface type str=string[20];
Telement=record fam:str; kniga:str; shifr:str; god:integer; kolvo:integer; end;
mas=array of Telement; ff=file of Telement;
Tavtor=class pv,nv:mas; m,n:integer; constructor create(a:integer); destructor Destroy; procedure poisk(familia: str); procedure insert(var pp:mas;var k:integer; zapis:Telement); procedure sort(var pp:mas); end;
var f:ff; fname:string;
implementation
constructor tavtor.create(a:integer); begin setlength(pv,a); end; Destructor Tavtor.destroy; begin setlength(pv,0); inherited destroy; end;
procedure tavtor.insert(var pp:mas; var k:integer;zapis:telement); begin k:=k+1; setlength(pp,k); pp[k]:=zapis; end;
end.
|
Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Grids,Unit2;
type TForm1 = class(TForm) MainMenu1: TMainMenu; StringGrid1: TStringGrid; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; OpenDialog1: TOpenDialog; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure N8Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; te:tavtor; f:ff; z:telement; fname:string;
implementation
uses Unit3, Unit4;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin te:=tavtor.create(0); fname:='date.lib'; assignfile(f,Fname); end;
procedure TForm1.N8Click(Sender: TObject); var dd:telement; begin form4.ShowModal; if form4.ModalResult=mrok then begin dd.fam:=form4.Edit1.Text; dd.kniga:=form4.Edit2.Text; dd.shifr:=form4.Edit3.Text; dd.god:=strtoint(form4.Edit4.Text); dd.kolvo:=strtoint(form4.Edit5.Text); end; form4.Close; te.insert(te.pv,te.m,dd); seek(f,filesize(f)); write(f,dd); closefile(f); end; end.
|
при вызове TForm1.N8Click происходят вот такого типа ошибки
Project C:\Program Files\Borland\Delphi6\Proiects\bibliotek3\Projectl.exe faulted with message: 'access violation at 0x7c90e8e7: write of address 0x00030ffc". Process Stopped. Use Step or Run to continue.
Дебагер показал что затык начинается со строки seek(f,filesize(f));
Что делаю не так??? я так понимаю что судя по типу ошибки идет обращение к несуществующему объекту в памяти... В общем что я где не так сделал?
P/S: Данное творение не мое, а набранный пример из методички для изучения ООП. Но как видно что-то либо упущенно либо неправильно написано.
|