Partilhar via


overlappedFreeError MDA

The overlappedFreeError gerenciado Assistente de depuração (MDA) é ativado quando o Overlapped.Free(NativeOverlapped*) método é chamado antes sobreposta a operação foi concluída.

Sintomas

Violações de acesso ou corrupção de heap de coleta de lixo.

Causa

Uma estrutura sobreposta foi liberada antes da operação foi concluída.A função que está usando o ponteiro sobreposto pode escrever a estrutura mais tarde, depois que foi liberada.Que pode causar corrupção da pilha, pois outro objeto agora pode ocupar essa região.

Este MDA pode não representar um erro se a operação sobreposta não iniciou com êxito.

Resolução

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

Efeito sobre o tempo de execução

Este MDA não tem efeito sobre o CLR.

Saída

A seguir é exemplo de saída 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

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Visão geral do empacotamento interop

Referência

MarshalAsAttribute