Megosztás a következőn keresztül:


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

Lásd még