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.
Nota
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Pelanggaran akses terjadi dalam kode yang tidak dikelola atau tidak aman ketika kode mencoba membaca atau menulis ke memori yang belum dialokasikan, atau yang tidak memiliki akses. Ini biasanya terjadi karena pointer memiliki nilai yang buruk. Tidak semua pembacaan atau penulisan melalui penunjuk buruk menyebabkan pelanggaran akses, sehingga pelanggaran akses biasanya menunjukkan bahwa beberapa bacaan atau tulis telah terjadi melalui penunjuk buruk, dan memori itu mungkin rusak. Dengan demikian, pelanggaran akses hampir selalu menunjukkan kesalahan pemrograman serius. AccessViolationException dapat secara jelas mengidentifikasi kesalahan serius ini.
Dalam program yang sepenuhnya terdiri dari kode terkelola yang dapat diverifikasi, semua referensi valid atau null, dan pelanggaran akses tidak mungkin. Setiap operasi yang mencoba mereferensikan referensi null dalam kode yang dapat diverifikasi melemparkan NullReferenceException pengecualian. Terjadi AccessViolationException hanya ketika kode terkelola yang dapat diverifikasi berinteraksi dengan kode yang tidak dikelola atau dengan kode terkelola yang tidak aman.
Memecahkan masalah pengecualian tipe AccessViolationException
Pengecualian AccessViolationException hanya dapat terjadi dalam kode terkelola yang tidak aman atau ketika kode terkelola yang dapat diverifikasi berinteraksi dengan kode yang tidak dikelola:
- Pelanggaran akses yang terjadi dalam kode terkelola yang tidak aman dapat dinyatakan sebagai NullReferenceException pengecualian atau AccessViolationException pengecualian, tergantung pada platform.
- Pelanggaran akses dalam kode tidak terkelola yang muncul ke kode terkelola selalu dibungkus dengan pengecualian AccessViolationException.
Dalam kedua kasus, Anda dapat mengidentifikasi dan memperbaiki penyebab AccessViolationException pengecualian sebagai berikut:
Pastikan bahwa memori yang Anda coba akses telah dialokasikan. Pengecualian AccessViolationException selalu dilemparkan oleh upaya untuk mengakses memori yang dilindungi—yaitu, untuk mengakses memori yang tidak dialokasikan atau yang tidak dimiliki oleh proses.
Manajemen memori otomatis adalah salah satu layanan yang disediakan runtime .NET. Jika kode terkelola menyediakan fungsionalitas yang sama dengan kode Anda yang tidak dikelola, pertimbangkan untuk pindah ke kode terkelola untuk memanfaatkan fungsionalitas ini. Untuk informasi selengkapnya, lihat Manajemen memori otomatis.
Pastikan memori yang Anda coba akses belum rusak. Jika beberapa operasi baca atau tulis telah terjadi melalui penunjuk buruk, memori mungkin rusak. Ini biasanya terjadi ketika membaca atau menulis ke alamat di luar buffer yang telah ditentukan sebelumnya.
AccessViolationException dan Blok Try/Catch
AccessViolationException pengecualian yang dihasilkan oleh runtime .NET tidak ditangani oleh instruksi catch dalam penangan pengecualian terstruktur jika pengecualian terjadi di luar memori yang dicadangkan oleh runtime.
.NET Framework saja: Untuk menangani pengecualian seperti AccessViolationException, terapkan atribut HandleProcessCorruptedStateExceptionsAttribute pada metode di mana pengecualian tersebut dilemparkan. Perubahan ini tidak memengaruhi AccessViolationException pengecualian yang dilemparkan oleh kode pengguna, yang dapat terus ditangkap oleh catch perintah.
Perhatian
Atribut HandleProcessCorruptedStateExceptions kedaluwarsa dalam versi .NET saat ini. Pemulihan dari status-pengecualian proses yang rusak tidak didukung, dan atribut, jika ada, diabaikan.