Нарушение доступа в 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 относится к не достаточно долго.
Другие вопросы по тегам