sobrepostoFreeError MDA

Note

Este artigo é específico para .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O overlappedFreeError MDA (assistente de depuração gerenciada) é ativado quando o Overlapped.Free(NativeOverlapped*) método é chamado antes da conclusão da operação sobreposta.

Symptoms

Violações de acesso ou corrupção do heap coletado por lixo.

Cause

Uma estrutura sobreposta foi liberada antes da conclusão da operação. A função que está usando o ponteiro sobreposto pode gravar na estrutura mais tarde, depois de ser liberada. Isso pode causar corrupção de heap porque outro objeto agora pode ocupar essa região.

Esse MDA pode não representar um erro se a operação sobreposta não tiver sido iniciada com êxito.

Resolução

Verifique se a operação de E/S usando a estrutura sobreposta foi concluída antes de chamar o Free(NativeOverlapped*) método.

Efeito no Runtime

Esse MDA não tem nenhum efeito sobre o CLR.

Saída

Veja a seguir a saída de exemplo para este 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.

Configuração

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

Consulte também