Freigeben über


overlappedFreeError-MDA

Der overlappedFreeError-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) ist aktiviert, wenn die Overlapped.Free(NativeOverlapped*)-Methode aufgerufen wird, bevor die überlappende Operation abgeschlossen ist.

Symptome

Zugriffsverletzungen oder Beschädigungen des Heaps der Garbage Collection

Ursache

Eine überlappende Struktur wurde vor Ende der Operation freigegeben. Die Funktion, die den überlappenden Zeiger verwendet, schreibt möglicherweise später in die Struktur, nachdem diese freigegeben wurde. Dies kann Heapschäden verursachen, da ein anderes Objekt jetzt diesen Bereich einnehmen könnte.

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

Lösung

Stellen Sie sicher, dass der E/A-Vorgang mit der überlappenden Struktur vor dem Aufrufen der Free(NativeOverlapped*)-Methode abgeschlossen wurde.

Auswirkungen auf die Laufzeit

Dieser MDA hat keine Auswirkungen auf die CLR.

Output

Im Folgenden finden Sie eine Beispielausgabe dieses MDAs.

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

Referenz

MarshalAsAttribute

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen

Interop-Marshalling