关于指针的问题?(50分)

  • 主题发起人 主题发起人 chuQingSheng
  • 开始时间 开始时间
C

chuQingSheng

Unregistered / Unconfirmed
GUEST, unregistred user!
function TBarClient.Add(AClientInfo: TClientInfo): Integer;
var
p :PClientInfo;
begin
if FClientList.Count>=FMaxClientNum then Result :=E_BAR_OVERFLOW
else
begin
GetMem(p, SizeOf(AClientInfo));
p^ :=AClientInfo;
Result :=FClientList.Add(p);
end;
end;


其中, TclientInfo为一记录。 PClientInfo为指向此类型的指针。

但在 p^ :=AClientInfo;总是运行时出错, Write内存问题,为什么?
 
杳AClientInfo是否為nil,如果是nil 則記錄類型沒有初始化或沒有值,
用setlength(AClientInfo,1);
 
在使用 p^ :=AClientInfo;之前先 New(p);
 
应该这样写
function TBarClient.Add(AClientInfo: TClientInfo): Integer;
var
p :PClientInfo;
begin
if FClientList.Count>=FMaxClientNum then Result :=E_BAR_OVERFLOW
else
begin
new(p);
copymemory(p,@AClientInfo,sizeof(TClientInfo))
Result :=FClientList.Add(p);
end;
end
 
我的写法为什么有问题???
AClientInfo参数并不为NIL.

 
TO homelee,这样虽然不出错,但COPY的也不对, 后面检索根本不对.
 
对于homelee的做法,TclientInfo类型中如果还包含数组或其他自定义类型这么做的话就会有问题。
 
是的, 我也这么认为,且TClientInfo中的确有其它的record, 当然也不是这个问题, 定义中
String类型. 后来我用new(p);然后, p^ :=AClientInfo;解决了. 但不知上面的错在那?
 
to: chuQingSheng
要找到答案,就要知道,New(p),和GetMem(p, SizeOf(AClientInfo))有什麼不同的地方。
我認為:new(p),不僅配置了指針p指向的數據結構大小,而且也配置了數據的結構。
GetMem(p, SizeOf(AClientInfo)),向os要指定大小的內存區塊,將其地址指到指針變量p。但他沒有配置數據結構.
 
也许吧, 我没有继续研究下去了. 大家分数吧
 

Similar threads

回复
0
查看
863
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部