使用 m_input.GetElement(&i, data+i) 從 COleSafeArray 複製資料到 BYTE* 緩衝區時,拋出 0xC0000005 存取違規,提示讀取位置 0x544e4545 失敗。
m_input 可能未正確初始化、維度不符,或 data 指標未分配足夠空間。i 迴圈變數若超出 m_input 實際元素數,會導致越界讀取。m_input 的維度與元素總數:m_input.GetOneDimSize()。data 已分配至少 length 位元組:BYTE* data = new BYTE[length]。ASSERT(i < m_input.GetOneDimSize())。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;
嚴格驗證陣列邊界與指標有效性,可徹底消除此類存取違規。