我有一个存储在内存映射文件中的双精度数组,我想读取数组的最后3个条目(或者某些任意条目)。
可以将存储在MMF中的整个数组复制到辅助数组中:
void ReadDataArrayToMMF(double* dataArray, int arrayLength, LPCTSTR* pBufPTR)
{
CopyMemory(dataArray, (PVOID)*pBufPTR, sizeof(double)*arrayLength);
}
并使用所需的条目,但这意味着将整个数组复制为实际需要的几个值。
我可以将arrayLength
缩小到某个数字n
以获取第一个n
条目,但是我遇到了复制无法启动的数组部分的问题从第一个条目。我尝试使用pBufPTR
指针但只能获得运行时错误。
关于如何从数组中间访问/复制内存而不需要复制整个数组的任何想法?
答案 0 :(得分:1)
查找第n个元素的起始偏移量:
const double *offset = reinterpret_cast<const double*>( *pBufPTR ) + n;
复制最后3个元素:
CopyMemory( dataArray, reinterpret_cast<const double*>( *pBufPTR ) + arrayLength - 3, 3 * sizeof(double) );
答案 1 :(得分:0)
您只需将要复制的第一个数组元素的(基于0)索引添加到传入的dataArray
指针值中......指针将按索引时间{{1}增加}}。确保传入sizeof(double)
值,反映要操作的元素数量,而不是原始数组长度。
例如,复制最后10个元素(假设您已经检查过至少有10个元素)......
arrayLength
同样(虽然说明了获取地址的不同符号),获取元素20..24:
ReadDataArrayToMMF(dataArray + arrayLength - 10, 10, &myBufPTR);