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
Konzepte
Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen