Bagikan melalui


Kelas System.AccessViolationException

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 Mengidentifikasi kesalahan serius ini dengan jelas.

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 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:

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 yang tidak dikelola, Anda mungkin ingin 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 coba/tangkap

AccessViolationException pengecualian yang dilemparkan oleh runtime .NET tidak ditangani oleh catch pernyataan dalam handler pengecualian terstruktur jika pengecualian terjadi di luar memori yang dicadangkan oleh runtime. Untuk menangani pengecualian seperti AccessViolationException itu, terapkan HandleProcessCorruptedStateExceptionsAttribute atribut ke metode di mana pengecualian dilemparkan. Perubahan ini tidak memengaruhi AccessViolationException pengecualian yang dilemparkan oleh kode pengguna, yang dapat terus ditangkap oleh catch pernyataan.