A arlock Unregistered / Unconfirmed GUEST, unregistred user! 2003-03-26 #1 小弟我对内存操作不熟悉,请教大家如何用Delphi在内存开辟空间?如何对开辟的空间的具体内存单元进行读写操作。最好能给我一个能说明问题的例程,现在书店里关于内存方面的内容太少了。谢谢大家
S smokingroom Unregistered / Unconfirmed GUEST, unregistred user! 2003-03-26 #4 New <-----> Dispose GetMem <-----> FreeMem AllocMem <-----> ReAllocMem Demo: type PMyRecord=^TMyRecord; TMyRecord=record FNo:Integer; FName:string[20]; end; procedure TForm1.Button1Click(Sender: TObject); var PMyRecord; begin New(P); P^.FNo:=123; P^.FName:='Lison'; ShowMessage(P^.FName); Dispose(P); end; procedure TForm1.Button2Click(Sender: TObject); var PMyRecord; begin GetMem(P,SizeOf(TMyRecord)); P.FNo:=123; P^.FName:='Lison'; ShowMessage(P.FName); FreeMem(P,SizeOf(TMyRecord)); end; procedure TForm1.Button3Click(Sender: TObject); var PMyRecord; begin P:=AllocMem(SizeOf(TMyRecord)); P.FNo:=123; P.FName:='Lison'; ShowMessage(P.FName); ReAllocMem(P,0); end;
New <-----> Dispose GetMem <-----> FreeMem AllocMem <-----> ReAllocMem Demo: type PMyRecord=^TMyRecord; TMyRecord=record FNo:Integer; FName:string[20]; end; procedure TForm1.Button1Click(Sender: TObject); var PMyRecord; begin New(P); P^.FNo:=123; P^.FName:='Lison'; ShowMessage(P^.FName); Dispose(P); end; procedure TForm1.Button2Click(Sender: TObject); var PMyRecord; begin GetMem(P,SizeOf(TMyRecord)); P.FNo:=123; P^.FName:='Lison'; ShowMessage(P.FName); FreeMem(P,SizeOf(TMyRecord)); end; procedure TForm1.Button3Click(Sender: TObject); var PMyRecord; begin P:=AllocMem(SizeOf(TMyRecord)); P.FNo:=123; P.FName:='Lison'; ShowMessage(P.FName); ReAllocMem(P,0); end;
A arlock Unregistered / Unconfirmed GUEST, unregistred user! 2003-03-26 #5 谢谢你的例程,我还想问一下,如果我开辟的空间很大,用指针确定内存单元,修改内存,怎么实现?谢谢
S smokingroom Unregistered / Unconfirmed GUEST, unregistred user! 2003-03-26 #6 var Pointer; I:Integer; begin GetMem(P,1000); for I:=0 to 255 do begin Byte(Pointer(LongInt(P)+I)^):=I; //訪問內存區位移為I的單元(字節) end; ShowMessage(IntToStr(Byte(Pointer(LongInt(P)+100)^))); FreeMem(P,1000); end;
var Pointer; I:Integer; begin GetMem(P,1000); for I:=0 to 255 do begin Byte(Pointer(LongInt(P)+I)^):=I; //訪問內存區位移為I的單元(字節) end; ShowMessage(IntToStr(Byte(Pointer(LongInt(P)+100)^))); FreeMem(P,1000); end;