Нарушение доступа в 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.
Стек вызовов:
--------------------------------------------------------------------------------------------
|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;
Есть идеи, что может быть не так и как это исправить?
1 ответ
Согласно комментариям, линия, которая поднимает нарушение доступа, является призывом к Move
, Таким образом, диагностика говорит вам, что указатель на буфер назначения не указывает на допустимый буфер, длина которого по крайней мере Length
,
Другими словами, ваша проблема в том, что либо:
FResultBuffer
неверный указатель или- Буфер, который
FResultBuffer
относится к не достаточно долго.