首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 記憶體存取違規 (0xC0000005) 除錯全攻略

     編輯:程式設計綜合問答

錯誤本質

0xC0000005 代表存取違規:讀/寫了未分配、已釋放或無權限的記憶體位址。常見於野指針、緩衝區溢位、雙重釋放、多線程競態。

利用 DMP + PDB + WinDbg 定位

  1. 確保編譯時生成 PDB 符號檔(Release 亦需開啟 /DEBUG 與 /Zi)。
  2. 收集崩潰時的 .dmp 轉儲檔(可設 SetErrorMode 或 WER 自動生成)。
  3. 在 WinDbg 中載入:.sympath srv*...; .reload; .open dump.dmp。
  4. 執行 !analyze -v 取得異常位址、呼叫堆疊、執行緒資訊。
  5. 重點檢視 Call Stack,回溯至自己的程式碼函式,分析該處指針來源與生命週期。

常見線索

  • 堆疊頂層在 ntdll!RtlFreeHeap → 可能雙重釋放或堆損毀。
  • 異常位址為 0x00000000 或 0xCCCCCCCC → 空指針或未初始化。
  • 異常位址接近陣列邊界 → 越界存取。

輔助工具

Visual Studio 記憶體檢查、Application Verifier、AddressSanitizer (Clang/GCC) 能在開發期提前捕獲。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved