Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Note
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
Asisten overlappedFreeError penelusuran kesalahan terkelola (MDA) diaktifkan ketika metode dipanggil Overlapped.Free(NativeOverlapped*) sebelum operasi yang tumpang tindih telah selesai.
Gejala
Pelanggaran akses atau kerusakan tumpukan yang dikumpulkan sampah.
Penyebab
Struktur yang tumpang tindih dibebaskan sebelum operasi selesai. Fungsi yang menggunakan penunjuk yang tumpang tindih mungkin menulis ke struktur nanti, setelah dibebaskan. Itu dapat menyebabkan kerusakan tumpukan karena objek lain sekarang mungkin menempati wilayah tersebut.
MDA ini mungkin tidak mewakili kesalahan jika operasi tumpang tindih tidak berhasil dimulai.
Resolution
Pastikan bahwa operasi I/O menggunakan struktur yang tumpang tindih telah selesai sebelum memanggil Free(NativeOverlapped*) metode .
Efek pada Runtime
MDA ini tidak berpengaruh pada CLR.
Hasil
Berikut ini adalah contoh output untuk MDA ini.
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.
Konfigurasi
<mdaConfig>
<assistants>
<overlappedFreeError/>
</assistants>
</mdaConfig>