AccessViolationException 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
當嘗試讀取或寫入受保護記憶體時拋出的例外。
public ref class AccessViolationException : SystemException
public class AccessViolationException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class AccessViolationException : SystemException
type AccessViolationException = class
inherit SystemException
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type AccessViolationException = class
inherit SystemException
Public Class AccessViolationException
Inherits SystemException
- 繼承
- 屬性
備註
當程式碼嘗試讀取或寫入尚未配置或無權存取的記憶體時,存取違規現象會發生在非受控(Unmanaged)或不安全(unsafe)的程式碼中。 這通常會因為指標的值不正確而發生。 並非所有透過錯誤的指標讀取或寫入都會導致存取違規,因此存取違規通常表示透過錯誤的指標發生數個讀取或寫入,而且記憶體可能已損毀。 因此,存取違規幾乎一律表示嚴重的程式設計錯誤。 AccessViolationException能清楚地識別這些嚴重錯誤。
在完全由可驗證的受控代碼組成的程式中,所有參考要麼有效,要麼為 null,而且存取錯誤是不可能的。 在可驗證程式碼中,任何嘗試參考空參考的操作都會擲回 NullReferenceException 異常。 AccessViolationException只有在可驗證的管理代碼與非管理代碼或不安全的管理代碼互動時,才會發生。
針對 AccessViolationException 例外狀況進行疑難解答
AccessViolationException只有在不安全的 Managed 程式代碼中,或當可驗證的 Managed 程式代碼與 Unmanaged 程式代碼互動時,才會發生例外狀況:
- 不安全 Managed 程式代碼中發生的存取違規可以表示為 NullReferenceException 例外狀況或 AccessViolationException 例外狀況,視平臺而定。
- 非受控程式碼中的存取違規一旦上升到受控程式碼,一律會包裝在例外狀況 AccessViolationException 中。
在這兩種情況下,您可以識別並更正例外狀況的原因 AccessViolationException ,如下所示:
確保您嘗試存取的記憶體已被分配。 每當嘗試存取受到保護的記憶體時,系統總是會擲回一個 AccessViolationException 例外,這表示存取的記憶體是未配置或不屬於該進程擁有。
自動記憶體管理是 .NET 運行時間所提供的其中一項服務。 如果 Managed 程式代碼提供與 Unmanaged 程式代碼相同的功能,請考慮移至 Managed 程式代碼以利用這項功能。 如需詳細資訊,請參閱 自動記憶體管理。
請確定您嘗試存取的記憶體尚未損毀。 如果透過錯誤的指標發生數個讀取或寫入作業,記憶體可能會損毀。 這通常會在讀取或寫入預先定義的緩衝區外部的位址時發生。
AccessViolationException 和 try/catch 區塊
AccessViolationException 如果例外狀況發生在運行時間保留的記憶體之外,.NET 運行時間擲回的例外狀況不會由 catch 結構化例外狀況處理程式中的 語句處理。
Caution
HandleProcessCorruptedStateExceptions 屬性在目前的 .NET 版本中已經過時。 不支援從損毀的進程狀態復原,例外如果存在則會忽略該屬性。
建構函式
| 名稱 | Description |
|---|---|
| AccessViolationException() |
初始化該類別的新實例 AccessViolationException ,並以系統提供的訊息描述錯誤。 |
| AccessViolationException(SerializationInfo, StreamingContext) |
已淘汰.
初始化一個新的類別實例 AccessViolationException ,並使用序列化資料。 |
| AccessViolationException(String, Exception) |
初始化類別的新實例 AccessViolationException ,並附上指定的錯誤訊息及導致該異常的內部例外的參考。 |
| AccessViolationException(String) |
初始化類別的新實例 AccessViolationException ,並以指定訊息描述錯誤。 |
屬性
| 名稱 | Description |
|---|---|
| Data |
取得一組鍵值對,提供關於例外的額外使用者定義資訊。 (繼承來源 Exception) |
| HelpLink |
取得或設定與此例外相關的說明檔案連結。 (繼承來源 Exception) |
| HResult |
取得或設定 HRESULT,一個編碼的數值,指派給特定例外。 (繼承來源 Exception) |
| InnerException |
會取得 Exception 造成目前例外的實例。 (繼承來源 Exception) |
| Message |
取得描述目前例外狀況的訊息。 (繼承來源 Exception) |
| Source |
取得或設定造成錯誤之應用程式或物件的名稱。 (繼承來源 Exception) |
| StackTrace |
會取得呼叫堆疊上即時框架的字串表示。 (繼承來源 Exception) |
| TargetSite |
會取得拋出當前例外的方法。 (繼承來源 Exception) |
方法
| 名稱 | Description |
|---|---|
| Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
| GetBaseException() |
當在派生類別中被覆寫時,回傳 Exception 是一個或多個後續例外的根因。 (繼承來源 Exception) |
| GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
已淘汰.
在衍生類別中覆寫時,使用例外狀況的相關信息來設定 SerializationInfo。 (繼承來源 Exception) |
| GetType() |
取得目前實例的執行時型態。 (繼承來源 Exception) |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| ToString() |
建立並回傳當前例外的字串表示。 (繼承來源 Exception) |
事件
| 名稱 | Description |
|---|---|
| SerializeObjectState |
已淘汰.
當例外被序列化以建立包含該例外序列化資料的例外狀態物件時,會發生這種情況。 (繼承來源 Exception) |