átfedésben lévőFreeError MDA
Feljegyzés
Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.
A overlappedFreeError
felügyelt hibakeresési segéd (MDA) akkor aktiválódik, amikor a metódust az Overlapped.Free(NativeOverlapped*) átfedésben lévő művelet befejezése előtt meghívják.
Hibajelenségek
Hozzáférés a szemétgyűjtő halom megsértéséhez vagy sérüléséhez.
Ok
A művelet befejeződése előtt egy átfedésben lévő struktúra lett felszabadítva. Az átfedésben lévő mutatót használó függvény a felszabadulása után később írhat a struktúrába. Ez halomsérülést okozhat, mert egy másik objektum most már elfoglalhatja ezt a régiót.
Ez az MDA nem feltétlenül jelent hibát, ha az átfedésben lévő művelet nem indult el sikeresen.
Resolution (Osztás)
A metódus meghívása előtt győződjön meg arról, hogy az átfedésben lévő struktúrát használó I/O-művelet Free(NativeOverlapped*) befejeződött.
Effektus a futtatókörnyezetre
Ez az MDA nincs hatással a CLR-re.
Hozam
Az alábbiakban az MDA mintakimenete található.
An overlapped pointer (0x00ea3430) that was not allocated on the GC heap was passed via Pinvoke to the win32 function 'WriteFile' in module 'KERNEL32.DLL'. If the AppDomain is shut down, this can cause heap corruption when the async I/O completes. The best solution is to pass a NativeOverlappedStructure retrieved from a call to System.Threading.Overlapped.Pack(). If the AppDomain exits, the CLR will keep this structure alive and pinned until the I/O completes.
Konfiguráció
<mdaConfig>
<assistants>
<overlappedFreeError/>
</assistants>
</mdaConfig>