它可能不相关,但我最近重新安装了 Delphi XE2。
我有一个变量path
(TPath 类型,一个 TMS Gogole 映射的东西,虽然我怀疑这很重要)。
我在调试器中停止并评估path
,其评估为Nil
。
如果我运行,我会得到一个异常,Read of address 0
我怀疑是因为这个。
Assigned(path)
然后,当我同时评估path = Nil
它演变为时True
(当我在线停止时,结果相同ShowMessage
- 执行))。
有人可以向我解释吗?
清理和重建没有任何改变。删除并重新安装Delphi会更好吗?
(向@mbratch致歉,我用var
的是demo,本名是actully path
)
[更新] TMS 提供并为他们工作的完整代码示例(在不同的 tiem 区域,这也是我在这里问的原因)。
This was retested here with:
uses
uwebgmapspolylines;
procedure TForm1.FormCreate(Sender: TObject);
var
p: TPath;
begin
p := TPath.Create;
if Assigned(p) then
ShowMessage('creation OK');
end;
and this proves the correct creation of TPath returns a valid instance.
当我停下来if Assigned(p) then
评估时,p
我得到了Nil
,但是当我评估时,Assigned(p)
我得到了True
。
当我将光标悬停在 IDE 中的变量声明上时,显示该类型是在 UWebGMapsPolyLines 中声明的
[进一步更新] 两票关闭?严重地?我猜来自那些认为这不可能的人 - 但它是!
奇怪的是,@j 尝试了它并得到了p <> Nil
. 但是,我在第二台 PC 上进行了尝试,仍然可以p = Nil
使用此处发布的代码,该代码由 TMS 提供。
我承认这看起来很奇怪,但我可以在 2 台电脑上重现它。P 是 Nil,但它是 Assigned()。
我没有 Assigend() 的代码可以进入。此外,我将代码稍微更改为显式if System.Assigned(p)
,但仍然得到相同的结果。有什么建议么?