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 başvuruya başvurmaya çalışan tüm işlemler bir NullReferenceException özel durum oluşturur. 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 özel durumlarıyla ilgili sorunları 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 yönetilen koda kadar kabarcık oluşturan erişim ihlali her zaman bir AccessViolationException özel durum içinde sarmalanı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şme girişimi (yani, ayrılmamış veya bir işleme ait olmayan belleğe erişme) her zaman bir özel durum oluşur.
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çmek isteyebilirsiniz. Daha fazla bilgi için bkz . Otomatik Bellek Yönetimi.
Erişmeye çalıştığınız belleğin bozuk olmadığından emin olun. Hatalı işaretçiler aracılığıyla birkaç okuma veya yazma işlemi oluştuysa, bellek bozulmuş olabilir. Bu durum genellikle önceden tanımlanmış bir arabelleğin dışındaki adresler okunurken veya adreslere yazılırken oluşur.
AccessViolationException ve try/catch blokları
AccessViolationException .NET çalışma zamanı tarafından oluşan özel durumlar, özel durum çalışma zamanı tarafından ayrılmış belleğin dışında oluşursa, yapılandırılmış bir özel durum işleyicisindeki deyimi tarafından catch
işlenmez. Böyle bir AccessViolationException özel durumu işlemek için özniteliğini HandleProcessCorruptedStateExceptionsAttribute özel durumun oluşturulduğu yönteme uygulayın. Bu değişiklik, kullanıcı kodu tarafından oluşan ve bir catch
deyim tarafından yakalanmaya devam edilebilen özel durumları etkilemezAccessViolationException.