Condividi tramite


MDA overlappedFreeError

L'assistente al debug gestito overlappedFreeError viene attivato quando il metodo Overlapped.Free(NativeOverlapped*) viene chiamato prima del completamento dell'operazione sovrapposta.

Sintomi

Violazioni di accesso o danneggiamento dell'heap sottoposto a Garbage Collection.

Causa

Una struttura sovrapposta è stata liberata prima del completamento dell'operazione. È quindi possibile che la funzione che utilizza il puntatore sovrapposto scriva nella struttura dopo che questa è stata liberata. Ciò può causare il danneggiamento dell'heap poiché tale area potrebbe essere già stata occupata da un altro oggetto.

Questo assistente al debug gestito può non rappresentare un errore se l'operazione sovrapposta non è stata avviata correttamente.

Risoluzione

Assicurarsi che l'operazione di I/O in cui viene utilizzata la struttura sovrapposta sia completata prima della chiamata al metodo Free(NativeOverlapped*).

Effetti su Common Language Runtime

Questo assistente al debug gestito non ha alcun effetto su Common Language Runtime (CLR).

Output

Di seguito è riportato un esempio di output relativo a questo assistente al debug gestito.

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.

Configurazione

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

Vedere anche

Riferimenti

MarshalAsAttribute

Concetti

Diagnostica degli errori tramite gli assistenti al debug gestito

Marshalling di interoperabilità