var p,pp:^integer; i:integer;new(p); new(pp);//自动 p:=&i;//I的地址dispose(p); dispose(pp);
拜托请先看清楚问题。pp=p+1,在delphi中好像不能进行这样的操作
方法1: var p,pp:PInteger; begin GetMem(p,n); pp:=PInteger(Integer(p)+SizeOf(Integer)); end; 方法2: var p,pp:^Integer; begin GetMem(p,n); pp:=p; Inc(pp); end;
var p,pp : ^Integer; begin New(p); new(pp); p^ := 1; pp := p; ShowMessage(IntToStr(p^)); ShowMessage(IntToStr(pp^));
var p,pp : ^Integer; begin New(p); new(pp); p^ := 1; pp := p; ShowMessage(IntToStr(p^)); ShowMessage(IntToStr(pp^)); Dispose(p); Dispose(pp);
var p,pp : ^Integer; begin try New(p); new(pp); p^ := 1; pp := p; ShowMessage(IntToStr(p^)); ShowMessage(IntToStr(pp^)); finally Dispose(p); Dispose(pp); end;
不知在分配内存后,p可不可以这样存取:p[x]:=..,好像delphi中不行
inc(p) = c中的 p++ dec(p) = c中的 p--
关键是我想在分配指针后用数组的方式存取,比如: //c version .... int *p, *pp; .... p=malloc(...); pp=p+1; .... pp[-1]=...;//**like this** ////////////// 在delphi中这样的操作好像不允许,不只如何解决
procedure TForm1.Button1Click(Sender: TObject); type TArray=array of Integer; var p:PInteger; a:TArray; i:Integer; begin GetMem(p,10*SizeOf(Integer)); a:=TArray(p); for i:=1 to 10 do begin p^:=i; Inc(p); end; for i:=1 to 10 do begin ShowMessage(Inttostr(a[i-1])); end; a:=nil; //FreeMem(p); end;不能确定是否有内存泄漏:)
p,pp:^integer;
i:integer;new(p);
new(pp);//自动
p:=&i;//I的地址dispose(p);
dispose(pp);
var
p,pp:PInteger;
begin
GetMem(p,n);
pp:=PInteger(Integer(p)+SizeOf(Integer));
end;
方法2:
var
p,pp:^Integer;
begin
GetMem(p,n);
pp:=p;
Inc(pp);
end;
p,pp : ^Integer;
begin
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
p,pp : ^Integer;
begin
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
Dispose(p);
Dispose(pp);
p,pp : ^Integer;
begin
try
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
finally
Dispose(p);
Dispose(pp);
end;
dec(p) = c中的 p--
//c version
....
int *p, *pp;
....
p=malloc(...);
pp=p+1;
....
pp[-1]=...;//**like this**
//////////////
在delphi中这样的操作好像不允许,不只如何解决
PInteger(Integer(pp)+SizeOf(Integer)*(-1))^:=.....
var
I, II: PInteger;
begin
GetMem(I, Sizeof(Integer) * 10); // p=malloc(...);
II := SysReallocMem(I, Sizeof(Integer) * 1); // pp=p+1;
FreeMem(I);
end;
pp=p+1;
pp[-1]=...;
type
TArray=array of Integer;
var
p:PInteger;
a:TArray;
i:Integer;
begin
GetMem(p,10*SizeOf(Integer));
a:=TArray(p);
for i:=1 to 10 do
begin
p^:=i;
Inc(p);
end; for i:=1 to 10 do
begin
ShowMessage(Inttostr(a[i-1]));
end;
a:=nil;
//FreeMem(p);
end;不能确定是否有内存泄漏:)