Sdílet prostřednictvím


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

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

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

Příznaky

Narušení přístupu nebo poškození haldy shromážděné z paměti.

Příčina

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

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

Rozlišení

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

Vliv na modul runtime

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

Výstup

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