overlappedFreeError MDA

Note

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

O overlappedFreeError assistente de depuração gerida (MDA) é ativado quando o Overlapped.Free(NativeOverlapped*) método é chamado antes de a operação sobreposta ter sido concluída.

Sintomas

Violações de acesso ou corrupção do monte de lixo.

Motivo

Uma estrutura sobreposta foi libertada antes da conclusão da operação. A função que utiliza o ponteiro sobreposto pode escrever na estrutura mais tarde, depois de esta ter sido libertada. Isso pode causar corrupção do heap porque outro objeto pode agora ocupar essa região.

Este MDA pode não representar um erro se a operação sobreposta não tiver começado com sucesso.

Resolução

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

Efeito no tempo de execução

Este MDA não tem efeito no CLR.

Output

Segue-se um 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>

Ver também