2014-03-13 30 views
1

随着EurekaLog,我发现在我的应用程序此访问冲突:访问冲突UIB EventCallback

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

调用堆栈:

-------------------------------------------------------------------------------------------- 
|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   |  | 
|------------------------------------------------------------------------------------------| 

和代码从uib.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; 

任何想法什么可能是错误的,以及如何解决它?

+0

你能破译EurekaLog报告吗?哪一行代码是错误的? –

+1

随着陈述给我heebie-jeebies。 (我认为我已经过度调节了。) – Sentient

+0

@DavidHeffernan:根据调用堆栈,错误位于Move(..)行。 – Harriv

回答

1

根据意见,引发访问违规的线路是对Move的呼叫。因此,诊断程序告诉您指向目标缓冲区的指针不指向长度至少为Length的有效缓冲区。

换句话说,你的问题是,要么:

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