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