使用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
引用的缓冲区不够长。