UIB EventCallback中的访问冲突



使用EurekaLog,我在我的应用程序中发现了这个访问违规:

 2.2 Address       : 00404A77
 2.5 Type          : EAccessViolation
 2.6 Message       : Access violation at address 00404A77 in module 'MyApp.exe'. Write of address 4F4F4E30.

Callstack:

--------------------------------------------------------------------------------------------
|Address |Module        |Unit           |Class          |Procedure/Method         |Line    |
--------------------------------------------------------------------------------------------
|*Exception Thread: ID=3748; Priority=??; Class=                                           |
|------------------------------------------------------------------------------------------|
|00404A77|MyApp.exe     |               |               |                         |        |
|75E1CD33|kernel32.dll  |               |               |LocalAlloc               |        |
|70BB2C72|MSVCR80.dll   |               |               |__set_flsgetvalue        |        |
|76F16FF2|ntdll.dll     |               |               |KiUserExceptionDispatcher|        |
|0064FC04|MyApp.exe     |uib.pas        |               |EventCallback            |4430[5] |
|70BB29A0|MSVCR80.dll   |               |               |_endthreadex             |        |
|75E1ED6A|kernel32.dll  |               |               |GetDriveTypeW            |        |
|------------------------------------------------------------------------------------------|

和ub .pas:

中的代码
procedure EventCallback(UserData: Pointer; Length: Smallint; Updated: PAnsiChar); cdecl;
begin
  if (Length > 0) and (Updated <> nil) then
  if (Assigned(UserData) and Assigned(Updated)) then
  with TUIBEventThread(UserData) do
  begin
    Move(Updated^, FResultBuffer^, Length);
    FQueueEvent := True;
    FSignal.SetEvent;
  end;
end;

知道什么是错误的和如何解决它吗?

根据注释,引发访问冲突的行是对Move的调用。因此,诊断告诉您,指向目标缓冲区的指针没有指向长度至少为Length的有效缓冲区。

换句话说,你的问题是:

  • FResultBuffer指针无效,或
  • FResultBuffer引用的缓冲区不够长。

相关内容

  • 没有找到相关文章

最新更新