overlappedFreeError MDA

Note

Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Der overlappedFreeError verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) wird aktiviert, wenn die Overlapped.Free(NativeOverlapped*) Methode aufgerufen wird, bevor der überlappende Vorgang abgeschlossen ist.

Symptome

Zugriffsverletzungen oder Beschädigungen des vom Garbage Collection-Heap gesammelten Heaps.

Ursache

Vor Abschluss des Vorgangs wurde eine überlappende Struktur freigegeben. Die Funktion, die den überlappenden Zeiger verwendet, kann später in die Struktur schreiben, nachdem sie freigegeben wurde. Dies kann zu Heapbeschädigungen führen, da ein anderes Objekt jetzt diese Region belegt.

Dieser MDA stellt möglicherweise keinen Fehler dar, wenn der überlappende Vorgang nicht erfolgreich gestartet wurde.

Auflösung

Stellen Sie sicher, dass der E/A-Vorgang mit der überlappenden Struktur abgeschlossen wurde, bevor die Free(NativeOverlapped*) Methode aufgerufen wird.

Effekt auf die Laufzeit

Diese MDA hat keine Auswirkungen auf die CLR.

Output

Im Folgenden sehen Sie eine Beispielausgabe für diese 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>

Siehe auch