我有一个存储在内存映射文件中的 double 数组,并且我想读取数组的最后3个条目(或与此相关的任意条目)。
可以将存储在MMF中的整个数组复制到辅助数组:
void ReadDataArrayToMMF(double* dataArray, int arrayLength, LPCTSTR* pBufPTR)
{
CopyMemory(dataArray, (PVOID)*pBufPTR, sizeof(double)*arrayLength);
}
并使用所需的条目,但这将意味着只复制一些实际需要的值即可复制整个数组。
我可以将
arrayLength
缩小为一些数字n
以获得第一个n
条目,但是在复制不是从第一个条目开始的数组的一部分时遇到了问题。我尝试使用pBufPTR
指针玩,但只能获取运行时错误。关于如何从阵列中间访问/复制内存而不需要复制整个阵列的任何想法?
最佳答案
要查找第n个元素的起始偏移量:
const double *offset = reinterpret_cast<const double*>( *pBufPTR ) + n;
复制最后3个元素:
CopyMemory( dataArray, reinterpret_cast<const double*>( *pBufPTR ) + arrayLength - 3, 3 * sizeof(double) );