这个 问题怎摸办?头疼!(100分)

  • 主题发起人 主题发起人 wtang
  • 开始时间 开始时间
W

wtang

Unregistered / Unconfirmed
GUEST, unregistred user!
xy= array [0..800000] of integer;
pxy=^xy;
....

getmem(pxy,n1*sizeof(integer))
...//赋值给pxy
..//现在我想增加n1,而pxy中原有的数据又不要丢,请告诉我该怎摸办。
//谢谢!
 
n1是什么?
 
不详细?????????????????
 
开始使用 GlobalAlloc,长度分配够,然后把指针赋给返回的句柄。
重新分配使用 GlobalReAlloc ,内容不会丢失。
 
应该是 AllocMem 吧!

方法一;
type
xy = array [0..800000] of integer;
pxy = ^xy;

procedure TForm1.Button1Click(Sender: TObject);
var a: pxy;
begin
a := AllocMem( n1*sizeof(integer))
....
end;

方法二;
type
xy = array [0..800000] of integer;
pxy = ^xy;

procedure TForm1.Button1Click(Sender: TObject);
var a: xy;
p: pxy;
begin
p := &a;
.....
end;

方法三:
用变长数组,见Delphi中VarArray的相关帮助
var
A: Variant;
begin
A := VarArrayCreate([0, 4], varVariant);
A[0] := 1;
A[1] := 1234.5678;
A[2] := 'Hello world';
A[3] := True;
A[4] := VarArrayOf([1, 10, 100, 1000]);
WriteLn(A[2]); { Hello world }
WriteLn(A[4][2]); { 100 }
end;

 
OopsWare:You are right.
可是如果我要执行 Freemem(Pointer,size);
那末是释放前面的数据,还是后面的数据?
 
Delphi帮助中说的详细:

procedure FreeMem(var P: Pointer[
Size: Integer]);

Size specifies the size in bytes of the dynamic variable
to dispose of
if specified, it must be exactly the number
of bytes previously allocated to that variable by GetMem.

释放的字节数必须是你先前分配的字节数,而且Size根本没必要写上的!
当然更不存在释放其中的某一部分了!
 
接受答案了.
 
后退
顶部