overlappedFreeError-MDA

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

Symptome

Zugriffsverletzungen oder Beschädigungen des Heaps der Garbage Collection.

Ursache

Eine überlappende Struktur wurde freigegeben, bevor der Vorgang abgeschlossen wurde. Die Funktion, die den überlappenden Zeiger verwendet, wird möglicherweise später auf die Struktur schreiben, nachdem dieser freigegeben wurde. Dies kann den Heap beschädigen, da ein anderes Objekt jetzt diesen Bereich einnehmen kann.

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

Lösung

Stellen Sie sicher, dass der E/A-Vorgang die überlappende Struktur verwendet, bevor Sie die Free(NativeOverlapped*)-Methode aufrufen.

Auswirkungen auf die Laufzeit

Dieser MDA hat keine Auswirkungen auf die CLR.

Ausgabe

Nachfolgend wird eine Beispielausgabe für diesen MDA angezeigt.

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>  

Weitere Informationen