一个关于内存访问的问题!(50分)

  • 主题发起人 主题发起人 arlock
  • 开始时间 开始时间
A

arlock

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我对内存操作不熟悉,请教大家如何用Delphi在内存开辟空间?如何对开辟的空间的具体内存单元进行读写操作。最好能给我一个能说明问题的例程,现在书店里关于内存方面的内容太少了。谢谢大家
 
getMem 查帮助
 
我已经看到了,可是我觉得效果不是太好。
 
New <-----> Dispose
GetMem <-----> FreeMem
AllocMem <-----> ReAllocMem

Demo:
type
PMyRecord=^TMyRecord;
TMyRecord=record
FNo:Integer;
FName:string[20];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
P:PMyRecord;
begin
New(P);
P^.FNo:=123;
P^.FName:='Lison';
ShowMessage(P^.FName);
Dispose(P);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
P: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
P:PMyRecord;
begin
P:=AllocMem(SizeOf(TMyRecord));
P.FNo:=123;
P.FName:='Lison';
ShowMessage(P.FName);
ReAllocMem(P,0);
end;
 
谢谢你的例程,我还想问一下,如果我开辟的空间很大,用指针确定内存单元,修改内存,怎么实现?谢谢
 
var
P: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;
 
我接受你的答案,谢谢你smokingroom
 
后退
顶部