overlappedFreeError – pomocník spravovaného ladění (MDA)

Spravovaný overlappedFreeError pomocník ladění (MDA) se aktivuje při zavolání Overlapped.Free(NativeOverlapped*) metody před dokončením překrývající se operace.

Příznaky

Narušení přístupu nebo poškození haldy, která byla uvolněna z paměti.

Příčina

Před dokončením operace byla uvolněna překrývající se struktura. Funkce, která používá překrývající se ukazatel, může do struktury zapisovat později po jeho uvolnění. To může způsobit poškození haldy, protože jiný objekt by teď mohl zabírat oblast.

Tento mda nemusí představovat chybu, pokud se překrývající se operace nespustí úspěšně.

Řešení

Před voláním Free(NativeOverlapped*) metody se ujistěte, že se dokončila vstupně-výstupní operace využívající překrývající se strukturu.

Vliv na modul runtime

Tento mda nemá žádný vliv na CLR.

Výstup

Následuje ukázkový výstup pro tento 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.

Konfigurace

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

Viz také