AccessViolationException 類別

定義

當嘗試讀取或寫入受保護記憶體時拋出的例外。

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
繼承
AccessViolationException
屬性

備註

當程式碼嘗試讀取或寫入尚未配置或無權存取的記憶體時,存取違規現象會發生在非受控(Unmanaged)或不安全(unsafe)的程式碼中。 這通常會因為指標的值不正確而發生。 並非所有透過錯誤的指標讀取或寫入都會導致存取違規,因此存取違規通常表示透過錯誤的指標發生數個讀取或寫入,而且記憶體可能已損毀。 因此,存取違規幾乎一律表示嚴重的程式設計錯誤。 AccessViolationException能清楚地識別這些嚴重錯誤。

在完全由可驗證的受控代碼組成的程式中,所有參考要麼有效,要麼為 null,而且存取錯誤是不可能的。 在可驗證程式碼中,任何嘗試參考空參考的操作都會擲回 NullReferenceException 異常。 AccessViolationException只有在可驗證的管理代碼與非管理代碼或不安全的管理代碼互動時,才會發生。

針對 AccessViolationException 例外狀況進行疑難解答

AccessViolationException只有在不安全的 Managed 程式代碼中,或當可驗證的 Managed 程式代碼與 Unmanaged 程式代碼互動時,才會發生例外狀況:

在這兩種情況下,您可以識別並更正例外狀況的原因 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)

適用於

另請參閱