劇集

存取違規C0000005

存取違規是應用程式讀取、寫入或執行無效記憶體位址時所造成的例外狀況類型。

例外狀況程式碼0xC0000005

第一個例外狀況參數 (0) 是違規的類型;讀取 (0)、 寫入 (1) 或執行 (8)

第二個例外狀況參數 (1) 是違規位址。

使用適用于 Windows 偵錯工具偵錯這些問題時,請遵循下列步驟:

  1. .exr -1
    • 例外狀況程式碼
    • Parameter[0] - 讀取 (0), 寫入 (1), 執行 (8)
    • Parameter[1] - 位址
  2. .ecxr
    • 在存取違規處註冊值
    • 組合器指示
      • 讀取 - 查看逗號右邊的運算式
      • 寫入 - 查看逗號左邊的運算式
      • 執行 - 查看運算式的位址
  3. k
    • 檢視存取違規的呼叫堆疊

記憶體位址可能無效,因為下列其中一個常見案例:

  • Null 指標 - 0x0與0x10000 (64K) 之間的位址 - 例如通常傳回 Null (0x0) 指標的函式,且指標未經驗證即可存取
  • 記憶體損毀 - 位址錯誤或惡意覆寫 - 通常透過緩衝區滿溢 (或不足)
  • Use-After-Free - 位址 有效 ,但在釋放位址(資料)或卸載後即會存取位址(程式碼)
  • 位翻轉 - RAM(硬體)問題,其中一或多個位已經翻轉(罕見)

如需 讀取或 寫入 問題,請參閱 讀取 或寫入 情節。
針對 執行 問題,請參閱 Execute 情節。

請注意,當地址介於 0x0 和 0x10000 之間時,具有 的 CLR 應用程式會擲回 System.NullReferenceException 例外狀況,而不是存取違規例外狀況。

其他資源:

有任何意見嗎? 請在此提交問題