Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
A hozzáférés megsértése nem felügyelt vagy nem biztonságos kódban fordul elő, amikor a kód olyan memóriába próbál olvasni vagy írni, amely nincs lefoglalva, vagy amelyhez nincs hozzáférése. Ez általában azért fordul elő, mert egy mutató értéke rossz. Nem minden rossz mutatón keresztüli olvasás vagy írás vezet hozzáférés-szabálysértésekhez, ezért a hozzáférés megsértése általában azt jelzi, hogy több olvasás vagy írás is hibás mutatókon keresztül történt, és a memória megsérülhet. Így a hozzáférés megsértése szinte mindig komoly programozási hibákat jelez. Egyértelműen AccessViolationException azonosítja ezeket a súlyos hibákat.
A teljes mértékben ellenőrizhető felügyelt kódból álló programokban minden hivatkozás érvényes vagy null értékű, és a hozzáférés megsértései lehetetlenek. Minden olyan művelet, amely null hivatkozásra próbál hivatkozni az ellenőrizhető kódban, kivételt NullReferenceException okoz. Ez AccessViolationException csak akkor fordul elő, ha az ellenőrizhető felügyelt kód nem felügyelt kóddal vagy nem biztonságos felügyelt kóddal kommunikál.
AccessViolationException kivételek hibaelhárítása
Kivétel AccessViolationException csak nem biztonságos felügyelt kódban fordulhat elő, vagy ha ellenőrizhető felügyelt kód nem felügyelt kóddal kommunikál:
- A nem biztonságos felügyelt kódban előforduló hozzáférés-megsértések a platformtól függően vagy NullReferenceException kivételként, vagy AccessViolationException kivételként fejezhetők ki.
- A nem felügyelt kódban lévő hozzáférési jogsértés, amely továbbítódik a felügyelt kódba, mindig kivételként van becsomagolva AccessViolationException.
Mindkét esetben az alábbiak szerint azonosíthatja és kijavíthatja a AccessViolationException kivétel okát:
Győződjön meg arról, hogy a elérni kívánt memória lefoglalva lett. Mindig kivétel keletkezik, amikor védett memóriához próbálunk hozzáférni, azaz olyan memóriához, amely nincs lefoglalva, vagy amely nem egy folyamat tulajdona.
Az automatikus memóriakezelés a .NET-futtatókörnyezet által biztosított szolgáltatások egyike. Ha a felügyelt kód ugyanazokat a funkciókat biztosítja, mint a nem felügyelt kód, érdemes lehet áttérni a felügyelt kódra, hogy kihasználhassa ezt a funkciót. További információ: Automatikus memóriakezelés.
Győződjön meg arról, hogy a elérni kívánt memória nem sérült. Ha több olvasási vagy írási művelet is előfordult rossz mutatóval, a memória megsérülhet. Ez általában akkor fordul elő, ha előre definiált pufferen kívüli címekre olvas vagy ír.
AccessViolationException és try/catch blokkok
AccessViolationException A .NET-futtatókörnyezet által kiadott kivételeket nem kezeli a catch strukturált kivételkezelőben lévő utasítás, ha a kivétel a futtatókörnyezet által fenntartott memórián kívül történik.
Csak .NET-keretrendszer: Az ilyen AccessViolationException kivétel kezeléséhez alkalmazza az HandleProcessCorruptedStateExceptionsAttribute attribútumot arra a metódusra, amelyben a kivételt ki kell dobni. Ez a módosítás nem érinti a felhasználói kód által kiadott AccessViolationException kivételeket, amelyeket továbbra is el lehet kapni egy catch utasítással.
Figyelmeztetés
A HandleProcessCorruptedStateExceptions attribútum elavult a jelenlegi .NET-verziókban. Sérült folyamatállapotból való helyreállítás – a kivételek nem támogatottak, és a rendszer figyelmen kívül hagyja az attribútumot, ha van ilyen.