delphi中的访问冲突

use*_*024 3 delphi delphi-2009

在delphi应用程序中,当我将鼠标移动到具有提示的组件时,我看到此错误:"模块'Plibrary.exe'中地址00484F3B处的访问冲突.读取地址0000026C"为什么会发生这种情况?

调用堆栈:

:758e9617 KERNELBASE.RaiseException + 0x54 
:458bf456 System.@UStrCmp 
:00407558 @UStrCmp + $2C 
Forms.TApplication.SetHint(???) 
Forms.TApplication.Idle(???) 
Forms.TApplication.HandleMessage 
Forms.TApplication.Run Plibrary.Plibrary 
:75ca1194 kernel32.BaseThreadInitThunk + 0x12 
:7752b3f5 ntdll.RtlInitializeExceptionChain + 0x63 
:7752b3c8 ntdll.RtlInitializeExceptionChain + 0x36" 
Run Code Online (Sandbox Code Playgroud)

失败的代码在第17732行的System.pas文件中:"MOV ESI,[ESP]"

编辑(来自评论):

在此过程的remain.pas文件中:

procedure TMainForm.ShowHint(Sender: TObject); 
begin 
  if Length(Application.Hint) > 0 then begin 
    StatusBar.SimplePanel := True; 
    StatusBar.SimpleText := Application.Hint; //this line gives error 
  end else    
    StatusBar.SimplePanel := False; 
end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

读取地址0000026C

该非常低的地址表示nil对象引用的成员字段的偏移.在调试器下运行并确保将调试器设置为在异常时中断.如果是这样,您应该能够找出哪个对象引用nil.

AV很可能发生在VCL代码中,尽管几乎可以肯定是由于代码中的错误.如果调试器没有在非常有用的位置中断,请在项目选项中启用Debug DCU,以便在引发异常的位置查看VCL源代码.

您提供的堆栈跟踪表明错误在TApplication.SetHint,同时执行字符串比较.第一行TApplication.SetHint读物:

if FHint <> Value then
Run Code Online (Sandbox Code Playgroud)

我敢打赌,偏移到FHintTApplication就是$026C和,不知何故,您的Application变量设置为nil.也就是说,我不明白为什么错误不会在之前提出Length(Application.Hint).远程调试很困难!

看了布局后TApplication,我想我们可以排除Application存在nil.也许FHint它本身已经被腐蚀了,或者甚至可能Value.我认为它可以访问实际的代码和调试环境来跟踪它.