程式運行時拋出異常: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;
程式碼中大量使用 strcpy、strtok 等不安全函數,建議改用 strncpy、strtok_s 並加強邊界檢查,提升健壯性。