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

C語言指標未初始化導致 0xC0000005 寫入衝突錯誤分析

     編輯:程式設計綜合問答

錯誤現象

程式運行時拋出異常:0xC0000005: 寫入位置 0x00000000 時發生存取違規。錯誤發生在 GetFlashParameter 函數中,嘗試透過指標 pNmsData 寫入結構體成員。

程式碼審視

bool main() {
    char *buf = "...";
    NmsData *pNmsData = NULL; // 指標未初始化,指向 NULL
    return ParseBuf(buf, strlen(buf), pNmsData);
}

在 ParseBuf 中將 pNmsData 傳給 GetFlashParameter,後者嘗試執行 pNmsData->lock = 5 等寫入操作,因指標為 NULL(地址 0x0),觸發存取違規。

根本原因與修正

  • 原因:指標 pNmsData 宣告時僅賦值 NULL,未分配記憶體。
  • 修正:在使用前必須分配記憶體,例如:
    NmsData *pNmsData = (NmsData*)malloc(sizeof(NmsData));
    // 或
    NmsData nmsData;
    NmsData *pNmsData = &nmsData;
    
  • 良好習慣:指標宣告即初始化;使用前檢查非 NULL;釋放後置 NULL。

延伸說明

程式碼中大量使用 strcpy、strtok 等不安全函數,建議改用 strncpy、strtok_s 並加強邊界檢查,提升健壯性。

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