Aracılığıyla paylaş


System.AccessViolationException sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Kod, ayrılmamış veya erişimi olmayan belleğe okuma veya yazma girişiminde bulunduğunda yönetilmeyen veya güvenli olmayan bir kodda erişim ihlali oluşur. Bu durum genellikle işaretçinin hatalı bir değerine sahip olması nedeniyle oluşur. Hatalı işaretçiler aracılığıyla yapılan tüm okuma ve yazma işlemleri erişim ihlallerine yol açmaz, bu nedenle erişim ihlali genellikle hatalı işaretçiler aracılığıyla birkaç okuma veya yazma işlemi gerçekleştiğini ve bu belleğin bozulabileceğini gösterir. Bu nedenle erişim ihlalleri neredeyse her zaman ciddi programlama hatalarına işaret eder. , AccessViolationException bu ciddi hataları net bir şekilde tanımlar.

Tamamen doğrulanabilir yönetilen koddan oluşan programlarda, tüm başvurular geçerli veya null olur ve erişim ihlalleri imkansızdır. Doğrulanabilir kodda null bir başvuruya atıfta bulunmaya çalışan tüm işlemler bir NullReferenceException istisnası fırlatır. Yalnızca AccessViolationException doğrulanabilir yönetilen kod yönetilmeyen kodla veya güvenli olmayan yönetilen kodla etkileşime geçtiğinde gerçekleşir.

AccessViolationException istisnalarını giderme

Özel AccessViolationException durum yalnızca güvenli olmayan yönetilen kodda veya doğrulanabilir yönetilen kod yönetilmeyen kodla etkileşime geçtiğinde oluşabilir:

  • Güvenli olmayan yönetilen kodda oluşan erişim ihlali, platforma bağlı olarak özel NullReferenceException durum veya AccessViolationException özel durum olarak ifade edilebilir.
  • Yönetilmeyen kodda meydana gelen bir erişim ihlali, yönetilen koda yukarı doğru yükselirken her zaman bir AccessViolationException özel durum içinde sarılır.

Her iki durumda da, özel durumun nedenini AccessViolationException aşağıdaki gibi tanımlayabilir ve düzeltebilirsiniz:

  • Erişmeye çalıştığınız belleğin ayrıldığından emin olun. AccessViolationException Korumalı belleğe erişim girişimi her zaman bir istisna fırlatır—bu, ayrılmamış veya bir işleme ait olmayan belleğe erişim demektir.

    Otomatik bellek yönetimi, .NET çalışma zamanının sağladığı hizmetlerden biridir. Yönetilen kod yönetilmeyen kodunuzla aynı işlevi sağlıyorsa, bu işlevden yararlanmak için yönetilen koda geçmeyi göz önünde bulundurun. Daha fazla bilgi için bkz. Otomatik bellek yönetimi.

  • Erişmeye çalıştığınız belleğin bozulmadığından emin olun. Hatalı işaretçiler aracılığıyla birkaç okuma veya yazma işlemi oluştuysa, bellek bozulmuş olabilir. Önceden tanımlanmış bir arabelleğin dışındaki adreslere yazarken veya bu adresleri okurken, bu durum genellikle meydana gelir.

AccessViolationException ve try/catch blokları

AccessViolationException .NET çalışma zamanı tarafından oluşturulan özel durumlar, eğer çalışma zamanı tarafından ayrılan bellek dışında meydana gelirlerse, yapılandırılmış bir özel durum işleyicisindeki catch deyimi tarafından işlenmez.

Yalnızca .NET Framework: Böyle bir AccessViolationException özel durumu işlemek için HandleProcessCorruptedStateExceptionsAttribute özniteliğini, özel durumun oluşturulduğu yönteme uygulayın. Bu değişiklik, kullanıcı kodu tarafından oluşan ve bir AccessViolationException deyim tarafından yakalanmaya devam edilebilen özel durumları etkilemezcatch.

Dikkat

HandleProcessCorruptedStateExceptions özniteliği geçerli .NET sürümlerinde kullanımdan kaldırıldı. Bozuk işlem durumundan kurtarma desteklenmez–özel durumlar desteklenmez ve varsa özniteliği yoksayılır.