【发布时间】:2014-10-16 08:25:10
【问题描述】:
问题摘要: 我指向一个类实例的指针,但是,当我尝试取消引用该指针并访问实例的属性时,我得到一个 EAccessViolation 异常,因为它取消引用“Nil ”。
我在单位范围内声明指针:
private
CurrentRXFrame: ^TSXcpFrame;
每次我的程序接收到一个帧,指针都会更新为指向这个最新的帧:
procedure TfrmFoo.OnReceivingFrame(Sender: TObject);
var
SXcpFrame: TSXcpFrame;
begin
SXcpFrame := TSXcpFrame.Create();
CurrentRXFrame := @SXcpFrame;
我尝试在同一单元中的某个其他例程中取消引用指针,但得到一个异常:
// `FrameBytes` is merely a dynamic array of type "Byte".
PrintMsg(IntToHex(CurrentRXFrame^.FrameBytes[0], 2));
例外:
raise exception class EAccessViolation with message 'Access violation at address 004DD1FE [...] Read of address 00000010.
如果我在此行之前设置断点,则相关变量的评估结果如下:
CurrentRXFrame := $18FD10
CurrentRXFrame^ := nil
CurrentRXFrame^.FrameBytes := Inaccessible value
问题:如何通过指针访问TSxcpFrame 类实例的属性?
【问题讨论】:
-
你获取了一个局部变量的地址。该地址在声明变量的函数结束之前一直有效。
标签: delphi pointers delphi-7 dereference