Self包含Img但Self.Img无法访问
答案 0 :(得分:5)
“无法访问的值”意味着对此值的引用无效,并且如果取消引用则会发出访问冲突,您的帖子的标题似乎表明正在发生的事情。
此调试数据是否显示在引发访问冲突之前或之后的值?引发异常可能会搞砸调试器在调用堆栈顶部显示的内容,并且不应信任来自前几帧的数据。
如果这是在引发异常之前,这意味着您在某处遇到了损坏的数据。是否只创建了一个(或少数)TPerson对象?如果是这样,你可以在构造函数中放置一个断点并在Img字段上设置一个data breakpoint,当值发生变化时它会中断,这将有助于你追踪腐败。
答案 1 :(得分:4)
无法访问的价值可能意味着两件事之一:
第一个解释会与您发现访问冲突。实际上,我尝试使用以下代码重新创建您的场景:
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
type
TMyClass = class
Img: TComponent;
procedure foo;
end;
procedure TMyClass.foo;
begin
Img := TComponent($deadbeef);
end;
begin
TMyClass.Create.foo;
end.
我在Img
的{{1}}分配后设置了一个断点,观察列表如下所示:
所有迹象都表明,在您的代码中,TMyClass.foo
指向无法访问的内存。
调试器将能够为您确认。如果您已破坏的行执行并产生访问冲突,则Img
或Self
无效。证据是Self.Img
没问题。但你应该能够毫不费力地调试它。