Dela via


overlappedFreeError MDA

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Den overlappedFreeError hanterade felsökningsassistenten Overlapped.Free(NativeOverlapped*) (MDA) aktiveras när metoden anropas innan den överlappande åtgärden har slutförts.

Symtom

Åtkomstöverträdelser eller skada av skräpinsamlingshögen.

Orsak

En överlappande struktur frigavs innan åtgärden slutfördes. Funktionen som använder den överlappande pekaren kan skriva till strukturen senare, efter att den har frigjorts. Det kan orsaka heap-skada eftersom ett annat objekt nu kan uppta den regionen.

Detta MDA kanske inte representerar ett fel om den överlappande åtgärden inte startades korrekt.

Åtgärd

Kontrollera att I/O-åtgärden med den överlappande strukturen har slutförts innan du anropar Free(NativeOverlapped*) metoden.

Effekt på körningen

Denna MDA har ingen effekt på CLR.

Output

Följande är exempelutdata för denna MDA.

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.

Konfiguration

<mdaConfig>
  <assistants>
    <overlappedFreeError/>
  </assistants>
</mdaConfig>

Se även