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

MFC 串口通訊中 COleSafeArray 導致存取違規的排查

     編輯:程式設計綜合問答

錯誤現象

使用 m_input.GetElement(&i, data+i) 從 COleSafeArray 複製資料到 BYTE* 緩衝區時,拋出 0xC0000005 存取違規,提示讀取位置 0x544e4545 失敗。

根因分析

  • 非記憶體洩漏,而是指標或陣列邊界錯誤。
  • m_input 可能未正確初始化、維度不符,或 data 指標未分配足夠空間。
  • i 迴圈變數若超出 m_input 實際元素數,會導致越界讀取。

排查步驟

  1. 檢查 m_input 的維度與元素總數:m_input.GetOneDimSize()。
  2. 確認 data 已分配至少 length 位元組:BYTE* data = new BYTE[length]。
  3. 在迴圈前加入斷言:ASSERT(i < m_input.GetOneDimSize())。
  4. 改用安全的複製方式:memcpy(data, m_input.GetData(), length)(前提是型別與佈局相容)。

修正範例

long length = m_input.GetOneDimSize();
BYTE* data = new BYTE[length];
void* pvData = m_input.AccessData();
memcpy(data, pvData, length);
m_input.UnaccessData();
// 後續使用 data...
delete[] data;

嚴格驗證陣列邊界與指標有效性,可徹底消除此類存取違規。

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