Compartir a través de


MDA de overlappedFreeError

Actualización: noviembre 2007

El ayudante para la depuración administrada overlappedFreeError (MDA) se activa cuando se llama al método Overlapped.Free(NativeOverlapped*) antes de que finalice la operación superpuesta.

Síntomas

Infracciones de acceso o daños en la pila de recolección de elementos no utilizados.

Motivo

Se ha liberado una estructura superpuesta antes de que finalizara la operación. La función que está utilizando el puntero superpuesto podría escribir después en la estructura, una vez que se hubiese liberado. Esto puede producir daños en la pila porque otro objeto podría ocupar ahora esa región.

Este Ayudante para la depuración administrada no podría representar un error si la operación superpuesta no se se hubiese iniciado correctamente.

Resolución

Asegúrese de que la operación de E/S que utiliza la estructura superpuesta haya finalizado antes de llamar al método Free(NativeOverlapped*).

Efecto en el tiempo de ejecución

Este MDA no tiene ningún efecto en CLR.

Resultado

A continuación se muestra un ejemplo de los resultados de 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.

Configuración

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

Vea también

Conceptos

Diagnóstico de errores con ayudantes de depuraciones administradas

Información general acerca del cálculo de referencia de interoperabilidad

Referencia

MarshalAsAttribute