变理赋值(100分)

  • 主题发起人 主题发起人 lhcming
  • 开始时间 开始时间
L

lhcming

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TBytes = array of byte;

tDept = Record
id:integer;
Name: array [0..40] of byte
end;

tPerson = Record
id: integer;
name: Array [0..8] of byte;
dept: tDept;
end;
pPerson = ^tPerson;

------------------------------------------------------------
//注:AData已经被赋值。
____________________________________________________________
procedure A(AData:TBytes);
var
person: pPerson;
begin
new(Person);
//注明: AData: Array of Byte

copyMemory(@person,@Adata,Sizeof(Adata));
dispose(Person)
//报错在这里????
end;
有哪位大侠知道原因吗? 应该如何做呢?
 
copyMemory(@person,@Adata,Sizeof(Adata));
-->>
person^ := (pPerson(Adata))^;
这样修改试试。
 
copyMemory之后Person的地址改变,恐怕类型也改变了,你只能Person:=nil;
 
copyMemory(@person,@Adata,Sizeof(Adata));
-->>
person^ := (pPerson(Adata))^;
这样修改试试。
---------------------------------------------------
这样的确能够正确释放,但是在person^结构里有值有些不正确。
比如person^.dept.id = 1,但却变成了 person^.dept.id = 0.
这是为什么呢?
 
person本身就是指针类型.你在copy的时候不应该用@person把??
 
原闻高见。
 
copyMemory(@person,@Adata,high(Adata)-low(Adata)+1);
 
copyMemory(@person,@Adata,high(Adata)-low(Adata)+1);不行,这样做的时候出现了内存地址错误!
不过,如果用CopyMemory(@person,@Adata,Sizeof(AData))的话,sizeof(AData)的大小始为4.不知道是怎么会事.
 
后退
顶部